Swift3.0iOS-swiftiOS程序猿

Swift3.0朝圣之路-objc_setAssociatedO

2016-10-09  本文已影响242人  溪枫狼

在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

QQ20161009-0@2x.png

后来尝试绑定字符串,可以运行,那就可能是类型不对,于是将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朝圣之路-全集地址

  1. Swift3.0闭包的使用详解,简单封装GET/POST网络请求
  2. WKWebView的使用详解,包括JS交互
  3. 原来MapKit的简单使用,包括定位+地图+地理编码
  4. OC+Swift混编,介绍高德地图SDK的简单使用,包括定位+地图+POI搜索+导航+UISearchController使用
  5. 协议代理的基础用法
  6. 分类/类别的使用和封装
  7. 【Then协议库】-眼前一亮的初始化方式
  8. 使用Runtime在分类Extension中添加属性
  9. 封装UIAlertController
  10. 自定义相册【尚未完成】
  11. 用原生框架扫描、识别二维码图片,生成黑白色、彩色二维码图片
上一篇下一篇

猜你喜欢

热点阅读