[英]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
不能過濾非標稱類型。 這是因為它們不相等:
即這里有一些非名義類型
Any
Tuples
- 很快就會相等Void aka () aka Empty Tuple
Functions aka () -> ()
你可以做的是創建一個像這樣的結構:
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.