栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Swift 2

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Swift 2

这应该起作用:将对象指针作为不透明的非托管指针传递给回调:

context.info = UnsafeMutablePointer(Unmanaged.passUnretained(myObject).toOpaque())SCNetworkReachabilitySetCallback(reachability, callback, &context)

并通过以下方式检索回调:

func callback(reachability:SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutablePointer<Void>) {    let myObject = Unmanaged<MyObject>.fromOpaque(COpaquePointer(info)).takeUnretainedValue()}

当然,这假定只要安装了回调,就存在对该对象的某些强引用,因此不会释放该对象。

更新: 请注意,如果您愿意使用“不安全”功能,则可以简化从对象指针到void指针以及返回的转换:

context.info = unsafeAddressOf(myObject)// ...myObject = unsafeBitCast(info, MyObject.self)

据我所知,生成的汇编代码是相同的。

更新2: 另请参阅如何快速将自身转换为UnsafeMutablePointer

<Void>
类型,以获取有关“桥接”和此处可以使用的一些辅助函数的更多信息。


Swift 3更新(Xpre 8 beta 6):

var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil)context.info = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())// ...func callback(reachability:SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) {    if let info = info {        let myObject = Unmanaged<MyObject>.fromOpaque(info).takeUnretainedValue()        // ...    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号