2016-08-19 24 views
58

mojego kodu snipet następująco ...:

let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    } 

... nie ma już skompilować z powodu następującego błędu, który nie rozumiem:

"'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type." 

Co zrobić, aby to naprawić?

+3

Zauważ, że http://stackoverflow.com/a/25623647/1187415 został zaktualizowany do bieżącego Swift 3. –

Odpowiedz

119

Z Obligacjami uwalnianie Xcode 8 beta 6:

  • Unsafe[Mutable]RawPointer typ został wprowadzony, zastępując Unsafe[Mutable]Pointer<Void>. Konwersja z UnsafePointer<T> na UnsafePointer<U> została odrzucona. Unsafe[Mutable]RawPointer zapewnia interfejs API dla dostępu bez typu pamięci oraz interfejs API do wiązania pamięci typu . Pamięć powiązania umożliwia bezpieczną konwersję między typami wskaźników . Zobacz bindMemory(to:capacity:), assumingMemoryBound(to:), i withMemoryRebound(to:capacity:). (SE-0107)

W twoim przypadku może być konieczne, aby napisać coś takiego:

let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
    $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
     SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
    } 
} 
+0

Tak, to działa na me..Thanks – TBI

18

Wymień

let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
    SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
} 

z

guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { 

     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { 

      SCNetworkReachabilityCreateWithAddress(nil, $0) 

     } 

    }) else { 

     return false 
    } 
5

Swift 3 zaktualizowano składnię, a dokładnym rozwiązaniem jest

guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { 
    $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { 
     zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)} 
}) else { 
    return false 
} 
Powiązane problemy