para codigo code apple swift3 unsafe-pointers xcode8-beta6

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 tipo Unsafe[Mutable]RawPointer , que reemplaza al Unsafe[Mutable]Pointer<Void> . La conversión de UnsafePointer<T> a UnsafePointer<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. Ver bindMemory(to:capacity:) , assumingMemoryBound(to:) y withMemoryRebound(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 }