swift3 - codigo - Swift 3 UnsafePointer($ 0) ya no se compila en Xcode 8 beta 6
testflight codigo (3)
De las Notas de la versión de Xcode 8 beta 6:
- Se
Unsafe[Mutable]RawPointer
tipoUnsafe[Mutable]RawPointer
, que reemplaza alUnsafe[Mutable]Pointer<Void>
. La conversión deUnsafePointer<T>
aUnsafePointer<U>
se ha permitido.Unsafe[Mutable]RawPointer
proporciona una API para acceso de memoria sin tipo y una API para vincular memoria a un tipo. La memoria de enlace permite una conversión segura entre tipos de puntero. VerbindMemory(to:capacity:)
,assumingMemoryBound(to:)
ywithMemoryRebound(to:capacity:)
. (SE-0107)
En su caso, es posible que deba escribir algo como esto:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
Mi código snipet de la siguiente manera ...:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
... ya no se compila con el siguiente error que no entiendo:
"''init'' is unavailable: use ''withMemoryRebound(to:capacity:_)'' to temporarily view memory as another layout-compatible type."
¿Qué hacer para arreglarlo?
Reemplazar
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
con
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
Swift 3 actualizó la sintaxis, la solución exacta es,
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)}
} ) else {
return false
}