书中说“功能和闭包是参考类型”。那么,你怎么知道引用是否相等?==和===不起作用。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
提交
取消