【问题标题】:Cannot invoke initializer for type 'UnsafeMutablePointer'无法为“UnsafeMutablePointer”类型调用初始化程序
【发布时间】: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&lt;Reachability&gt;.fromOpaque(info).takeUnretainedValue() DispatchQueue.main.async { reachability.reachabilityChanged() } }
  • @LeoDabus 谢谢你,太棒了!
  • 比较一下stackoverflow.com/a/30788165/1187415,它是前段时间为 Swift 3 更新的。

标签: reachability swift3


【解决方案1】:

the latest reference检查info属性的类型:

声明

var info: UnsafeMutableRawPointer?

toOpaque()的类型变成了UnsafeMutableRawPointer。 (我找不到最新的 Apple 文档,但您可以在 Xcode 的“快速帮助”窗格中轻松查看。)

您无需转换:

    context.info = Unmanaged.passUnretained(self).toOpaque()

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多