Mon code snipet comme suit…:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) }
… Ne comstack plus avec l’erreur suivante que je ne comprends pas:
"'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type."
Que faire pour y remédier?
A partir des notes de publication de Xcode 8 beta 6:
- Un type
Unsafe[Mutable]RawPointer
a été introduit, remplaçant leUnsafe[Mutable]Pointer
. La conversion deUnsafePointer
enUnsafePointer
a été interdite.Unsafe[Mutable]RawPointer
fournit une API pour un access mémoire non typé et une API pour lier la mémoire à un type. La mémoire de liaison permet une conversion sûre entre les types de pointeurs. VoirbindMemory(to:capacity:)
,assumingMemoryBound(to:)
etwithMemoryRebound(to:capacity:)
. (SE-0107)
Dans votre cas, vous devrez peut-être écrire quelque chose comme ceci:
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) } }
Remplacer
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) }
avec
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { SCNetworkReachabilityCreateWithAddress(nil, $0) } }) else { return false }
Swift 3 a mis à jour la syntaxe, la solution exacte est,
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)} } ) else { return false }