반응형
Swift 3 UnsafePointer ($ 0)는 더 이상 Xcode 8 베타 6에서 컴파일되지 않습니다.
다음과 같이 내 코드 스 니펫 ... :
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
… 내가 이해할 수없는 다음 오류로 더 이상 컴파일되지 않습니다.
"'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type."
어떻게 해결해야합니까?
Xcode 8 베타 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)
}
}
바꾸다
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
와
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
Swift 3은 구문을 업데이트했으며 정확한 해결책은
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
zeroSockAddress in SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)}
} ) else {
return false
}
반응형
'development' 카테고리의 다른 글
스크립팅을 사용하여 stdout을 파일과 콘솔 모두로 리디렉션하는 방법은 무엇입니까? (0) | 2020.12.03 |
---|---|
문자열을 BigInteger로 어떻게 변환합니까? (0) | 2020.12.03 |
Visual Studio Build Framework에서 .NET Core 2.2를 선택할 수 없음 (0) | 2020.12.03 |
개체가 VBA에서 컬렉션의 구성원인지 확인 (0) | 2020.12.03 |
Scala에서 빈 배열에 대한 정식 방법? (0) | 2020.12.03 |