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 может определить его. Также лучше избегать принудительного развертывания.