swift closure 与 oc block 转换

有时候我们不会直接调用block或closure,而是将其保存到内存中延后使用。
而此时,swift 和 oc之间相互调用则会出现问题。

解决:
情景1:swift 的closure 给 oc 调用
将swift的closure定义前加上 @convention(block) ,这样定义出的closure就是oc的block结构,可以传给oc调用。

情景2:oc 的block给closure调用
oc里面是不会有情景1的方法,所以只能在swift层自己进行转换,因为swift是支持调用oc结构的block的,但是需要处理。
由于oc保存时将block放到内存,此时定义的是id类型,而swift获取时拿到的是AnyObject或者Any,不是closure,因此要将AnyObject换成closure。
如下:假设block保存在dictionary

if let cb = params?["callBack"] {
    callBack = unsafeBitCast(cb as AnyObject, to: BSActionsCallBack.self)
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容