Swift 3 오류에서 코드 액세스
Xcode 8 베타 4의 새로운 기능 NSError
은 Swift Error
프로토콜 유형에 연결됩니다 . 이는 실패한을 처리 할 때 StoreKit에 영향을줍니다 SKPaymentTransaction
. 사용자에게 오류 메시지를 표시할지 여부를 알기 위해 트랜잭션이 취소 되었기 때문에 오류가 발생하지 않았는지 확인해야합니다. 오류의 code
. 그러나 Error
대신에 정의 된 NSError
것이 없습니다 code
. 에서 오류 코드를 올바르게 가져 오는 방법을 알아낼 수 없었습니다 Error
.
이것은 이전 버전의 Swift 3에서 작동했습니다.
func failedTransaction(_ transaction: SKPaymentTransaction) {
if let transactionError = transaction.error {
if transactionError.code != SKErrorCode.paymentCancelled.rawValue {
//show error to user
}
}
...
}
이제이 error
는 Error
하지 NSError
, code
구성원이 아닙니다.
캐스팅 SKError
은 xCode 8 및 Swift 3에서 나를 위해 작동 하는 것 같습니다.
guard let error = transaction.error as? SKError else {return}
switch error.code { // https://developer.apple.com/reference/storekit/skerror.code
case .unknown: break
case .paymentCancelled: break
case .clientInvalid: break
case .paymentInvalid: break
case .paymentNotAllowed: break
case .cloudServiceNetworkConnectionFailed: break
case .cloudServicePermissionDenied: break
case .storeProductNotAvailable: break
}
필요 없습니다 rawValue
.
Swift 3 오류 유형의 코드 및 도메인 속성에 액세스하는 또 다른 옵션은 다음과 같이 확장하는 것입니다.
extension Error {
var code: Int { return (self as NSError).code }
var domain: String { return (self as NSError).domain }
}
이제 Xcode 8 및 swift 3에서 조건부 캐스트가 항상 성공하므로 다음을 수행해야합니다.
let code = (error as NSError).code
code
귀하의 요구 사항을 확인하십시오 . 도움이 되었기를 바랍니다
이것은 정확합니다 (Apple 자체 테스트에서이 접근 방식을 사용함).
if error._code == SKError.code.paymentCancelled.rawValue { ... }
반면에 NSError 로의 캐스트는 곧 사용이 중단 될 것입니다.
let code = (error as NSError).code // CODE SMELL!!
if code == SKError.code.paymentCancelled.rawValue { ... }
사용하다
error._code == NSURLErrorCancelled
오류 코드와 일치합니다.
참고 URL : https://stackoverflow.com/questions/38711269/accessing-code-in-swift-3-error
'Programing' 카테고리의 다른 글
Gradle buildConfigField BuildConfig가 기호를 확인할 수 없습니다. (0) | 2020.11.17 |
---|---|
IIS 구성 오류-이 구성 섹션은이 경로에서 사용할 수 없습니다. (0) | 2020.11.16 |
열거 형 값을 SelectList로 가져 오는 방법 (0) | 2020.11.16 |
Spring MVC Controller에서 IP 주소를 추출하는 방법은 무엇입니까? (0) | 2020.11.16 |
컴퓨터 종료 (0) | 2020.11.16 |