为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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


查看完整回答
反对 回复 2019-08-27
?
千万里不及你

TA贡献1784条经验 获得超9个赞

我搜索了很多。似乎没有办法比较函数指针。我得到的最好的解决方案是将函数或闭包封装在一个可散列的对象中。喜欢:

var handler:Handler = Handler(callback: { (message:String) in
            //handler body}))


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信