Sté*_*uca 60 unsafe-pointers swift3 xcode8-beta6
我的代码snipet如下......:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
Run Code Online (Sandbox Code Playgroud)
...不再使用以下错误编译,我不明白:
"'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type."
Run Code Online (Sandbox Code Playgroud)
该怎么做才能修复它?
OOP*_*Per 126
从Xcode 8 beta 6的发行说明:
Unsafe[Mutable]RawPointer已经引入了一种类型,取而代之Unsafe[Mutable]Pointer<Void>.转换UnsafePointer<T>为UnsafePointer<U>已被禁止.Unsafe[Mutable]RawPointer提供用于非类型化内存访问的API,以及用于将内存绑定到类型的API.绑定内存允许指针类型之间的安全转换.见bindMemory(to:capacity:),assumingMemoryBound(to:)和withMemoryRebound(to:capacity:).(SE-0107)
在您的情况下,您可能需要编写如下内容:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 17
更换
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
Run Code Online (Sandbox Code Playgroud)
同
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
Run Code Online (Sandbox Code Playgroud)
Swift 3更新了语法,确切的解决方案是,
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)}
} ) else {
return false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20953 次 |
| 最近记录: |