你如何测试函数和闭包是否相等?

书中说“功能和闭包是参考类型”。那么,你怎么知道引用是否相等?==和===不起作用。

func a() { }let å = alet b = å === å // Could not find an overload for === that accepts the supplied arguments

以下是Catterwauls如何处理这个问题:

MultiClosures和Equatable Closures

你如何测试函数和闭包是否相等?

呼啦一阵风
浏览 512回答 3
3回答

扬帆大鱼

最简单的方法是将块类型指定为@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

千万里不及你

我搜索了很多。似乎没有办法比较函数指针。我得到的最好的解决方案是将函数或闭包封装在一个可散列的对象中。喜欢:var handler:Handler = Handler(callback: { (message:String) in             //handler body}))
打开App,查看更多内容
随时随地看视频慕课网APP