書中說“功能和閉包是參考類型”。那么,你怎么知道引用是否相等?==和===不起作用。func a() { }let ? = alet b = ? === ? // Could not find an overload for === that accepts the supplied arguments以下是Catterwauls如何處理這個問題:MultiClosures和Equatable Closures你如何測試函數和閉包是否相等?
3 回答
揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
最簡單的方法是將塊類型指定為@objc_block,現在可以將其轉換為與之類似的AnyObject ===。例:
typealias Ftype = @objc_block (s:String) -> ()
let f : Ftype = {
ss in
println(ss)
}
let ff : Ftype = {
sss in
println(sss)
}
let obj1 = unsafeBitCast(f, AnyObject.self)
let obj2 = unsafeBitCast(ff, AnyObject.self)
let obj3 = unsafeBitCast(f, AnyObject.self)
println(obj1 === obj2) // false
println(obj1 === obj3) // true
千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
我搜索了很多。似乎沒有辦法比較函數指針。我得到的最好的解決方案是將函數或閉包封裝在一個可散列的對象中。喜歡:
var handler:Handler = Handler(callback: { (message:String) in
//handler body}))添加回答
舉報
0/150
提交
取消
