在Swift3.0中使用Runtime中的objc_setAssociatedObject绑定Block闭包,编译时会出现报错。出错代码如下:
let key: UnsafeRawPointer! = UnsafeRawPointer.init(bitPattern: "key".hashValue)
objc_setAssociatedObject(self, key, myBlock, .OBJC_ASSOCIATION_COPY_NONATOMIC)
报错Showing Recent Issues Command failed due to signal: Segmentation fault: 11
后来尝试绑定字符串,可以运行,那就可能是类型不对,于是将Block转成AnyObject类型,完美解决。
解决方案:
objc_setAssociatedObject(self, key, myBlock as AnyObject, .OBJC_ASSOCIATION_COPY_NONATOMIC)
如果对创建UnsafeRawPointer类型Key
的代码好奇,请看我另一篇文章:Swift3.0朝圣之路-使用Runtime在分类Extension中添加属性
我所有Swift3.0练习Demo都放到了Github上,并且在不断更新。
Swift3.0朝圣之路-全集地址