Значение необязательного типа «PKPaymentAuthorizationViewController?» должен быть развернут - PullRequest
0 голосов
/ 07 июня 2019

Когда я пытаюсь скомпилировать реагирующее приложение для iOS, ниже блока кода для ApplePay

    let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request)
    applePayController.delegate = self
    let rootViewController:UIViewController? = UIApplication.shared.delegate?.window??.rootViewController!
    rootViewController!.present(applePayController, animated: true, completion: nil)

выдает ошибку времени выполнения.

Value of optional type 'PKPaymentAuthorizationViewController?' must be unwrapped to refer to member 'delegate' of wrapped base type 'PKPaymentAuthorizationViewController'

какя могу решить эту проблему?

1 Ответ

2 голосов
/ 07 июня 2019

PKPaymentAuthorizationViewController имеет сбойный инициализатор - то есть инициализатор вернет nil, если пользователь не сможет произвести платеж.

Это означает, что applePayController - это необязательный - он может содержать nil, поэтому, как и в сообщении об ошибке, вам нужно развернуть необязательный элемент, прежде чем вы сможете получить доступ к свойству; applePayController?.delegate = self. Лучше всего использовать if let или guard let.

Например:

if let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request), 
   let rootViewController = UIApplication.shared.delegate?.window??.rootViewController {
    applePayController.delegate = self
    rootViewController.present(applePayController, animated: true, completion: nil)
} else {
    // Payment is unavailable - handle this as appropriate
}

Нет необходимости указывать тип, когда Swift может определить его. Также лучше избегать принудительного развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...