software mac for descargar apple swift swift3

mac - Código de acceso en Swift 3 Error



swift for mac download (4)

Nuevo en Xcode 8 beta 4, NSError se NSError al tipo de protocolo Swift Error . Esto afecta a StoreKit cuando se trata de fallidos SKPaymentTransaction s. Debe verificar para asegurarse de que el error no se produjo porque la transacción se canceló para saber si se debe mostrar o no un mensaje de error al usuario. Para ello, examina el code del error. Pero con Error lugar de NSError , no hay code definido. No he podido averiguar cómo obtener correctamente el código de Error de Error .

Esto funcionó en la versión anterior de Swift 3:

func failedTransaction(_ transaction: SKPaymentTransaction) { if let transactionError = transaction.error { if transactionError.code != SKErrorCode.paymentCancelled.rawValue { //show error to user } } ... }

Ahora ese error es un Error no NSError , el code no es un miembro.


Ahora en Xcode 8 y swift 3 la conversión condicional siempre tiene éxito, por lo que debe hacer lo siguiente:

let code = (error as NSError).code

y verifique el code para sus necesidades. Espero que esto ayude


Casting to SKError parece estar funcionando para mí en xCode 8 y 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 }

No hay necesidad de rawValue .


Esto es correcto (las propias pruebas de Apple utilizan este enfoque):

if error._code == SKError.code.paymentCancelled.rawValue { ... }

Por otro lado, la conversión a NSError probablemente quedará obsoleta pronto:

let code = (error as NSError).code // CODE SMELL!! if code == SKError.code.paymentCancelled.rawValue { ... }


Otra opción para acceder a las propiedades de código y dominio en los tipos de error de Swift 3 es extenderlo de la siguiente manera:

extension Error { var code: Int { return (self as NSError).code } var domain: String { return (self as NSError).domain } }