【发布时间】:2016-09-01 06:58:28
【问题描述】:
我正在尝试将 Reachability.swift 更新到 swift 3.0,但在将 Reachability 实例传递给回调函数时遇到了问题。
这是我的 sn-p: * 请注意 self = 可达性类
var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil)
context.info = UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque())
编译器抛出错误的地方:
无法调用类型为“UnsafeMutablePointer<_>”的初始化程序 '(UnsafeMutableRawPointer)' 类型的参数列表
指针转换受限:使用 '.sumptionMemoryBound(to:)' 或 '.bindMemory(to:capacity:)' 将内存视为一种类型。
“UnsafeMutablePointer<_>”的重载部分存在 匹配参数列表:(RawPointer)、(OpaquePointer)、 (OpaquePointer?), (UnsafeMutablePointer), (UnsafeMutablePointer?)
据我所知,我需要将 open class Reachability: NSObject 类型的 self 转换为 UnsafeMutablPointer 但我不确定如何继续。
【问题讨论】:
-
在回调
func callback(reachability: SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) { print("--- callback") guard let info = info else { return } let reachability = Unmanaged<Reachability>.fromOpaque(info).takeUnretainedValue() DispatchQueue.main.async { reachability.reachabilityChanged() } } -
@LeoDabus 谢谢你,太棒了!
-
比较一下stackoverflow.com/a/30788165/1187415,它是前段时间为 Swift 3 更新的。
标签: reachability swift3