簡體   English   中英

過濾函數數組Swift

[英]Filtering array of functions Swift

當我過濾函數數組以從數組中排除特定函數時,過濾后的數組不包含任何元素。 知道為什么會這樣嗎?

var array: [()->()] = []

array.append(function1)
array.append(function2)

let function: ()
function = function1()
var filteredArray: [()->()] = []
filteredArray = array.filter { $0() != function }

print(filteredArray.count) // 0

不能過濾非標稱類型。 這是因為它們不相等:

這里有一些非名義類型

你可以做的是創建一個像這樣的結構:

struct Method: Hashable, Equatable {
    var name: String
    var method: () -> () // or whatever type you want
    init(_ n: String,_ m: @escaping () -> ()) {
        name = n
        method = m
    }

    // Equatable
    static func == (lhs: Method, rhs: Method) -> Bool {
        return lhs.name == rhs.name
    }

    // Hashable
    func hash(into hasher: inout Hasher) {
        hasher.combine(name)
    }
}

所以name是用來檢查方法是否相等的。 但是對於structs這么多了。

如果你願意,你可以創建一個類似的class來跟蹤引用。


示例代碼:

func function1() {print("foo")}
func function2() {print("bar")}

var array: [Method] = []

array.append(Method("One", function1))
array.append(Method("Two", function2))

let function: Method
function = Method("One", function1)
var filteredArray: [Method] = []
filteredArray = array.filter { $0 != function}

print(filteredArray.count) // 1

filteredArray.first?.method() // prints "bar"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM