从Objective-C重写的Swift 3代码不';行不通
所以我有Objective-C中的代码,我需要重写成Swift3 然而,它似乎不起作用。下面是Objective-C,我将其改写为Swift3: 目标-C从Objective-C重写的Swift 3代码不';行不通,objective-c,xcode,swift3,Objective C,Xcode,Swift3,所以我有Objective-C中的代码,我需要重写成Swift3 然而,它似乎不起作用。下面是Objective-C,我将其改写为Swift3: 目标-C - (void)handleMobilePayPaymentWithUrl:(NSURL *)url { [[MobilePayManager sharedInstance]handleMobilePayPaymentWithUrl:url success:^(MobilePaySuccessfulPayment * _Nullabl
- (void)handleMobilePayPaymentWithUrl:(NSURL *)url
{
[[MobilePayManager sharedInstance]handleMobilePayPaymentWithUrl:url success:^(MobilePaySuccessfulPayment * _Nullable mobilePaySuccessfulPayment) {
NSString *orderId = mobilePaySuccessfulPayment.orderId;
NSString *transactionId = mobilePaySuccessfulPayment.transactionId;
NSString *amountWithdrawnFromCard = [NSString stringWithFormat:@"%f",mobilePaySuccessfulPayment.amountWithdrawnFromCard];
NSLog(@"MobilePay purchase succeeded: Your have now paid for order with id '%@' and MobilePay transaction id '%@' and the amount withdrawn from the card is: '%@'", orderId, transactionId,amountWithdrawnFromCard);
[ViewHelper showAlertWithTitle:@"MobilePay Succeeded" message:[NSString stringWithFormat:@"You have now paid with MobilePay. Your MobilePay transactionId is '%@'", transactionId]];
} error:^(NSError * _Nonnull error) {
NSDictionary *dict = error.userInfo;
NSString *errorMessage = [dict valueForKey:NSLocalizedFailureReasonErrorKey];
NSLog(@"MobilePay purchase failed: Error code '%li' and message '%@'",(long)error.code,errorMessage);
[ViewHelper showAlertWithTitle:[NSString stringWithFormat:@"MobilePay Error %li",(long)error.code] message:errorMessage];
//TODO: show an appropriate error message to the user. Check MobilePayManager.h for a complete description of the error codes
//An example of using the MobilePayErrorCode enum
//if (error.code == MobilePayErrorCodeUpdateApp) {
// NSLog(@"You must update your MobilePay app");
//}
} cancel:^(MobilePayCancelledPayment * _Nullable mobilePayCancelledPayment) {
NSLog(@"MobilePay purchase with order id '%@' cancelled by user", mobilePayCancelledPayment.orderId);
[ViewHelper showAlertWithTitle:@"MobilePay Canceled" message:@"You cancelled the payment flow from MobilePay, please pick a fruit and try again"];
}];
}
我的Swift3重写:
func handleMobilePayPayment(with url: URL) {
MobilePayManager.sharedInstance().handleMobilePayPayment(with: url, success: {( mobilePaySuccessfulPayment: MobilePaySuccessfulPayment?) -> Void in
let orderId: String = mobilePaySuccessfulPayment!.orderId
let transactionId: String = mobilePaySuccessfulPayment!.transactionId
let amountWithdrawnFromCard: String = "\(mobilePaySuccessfulPayment!.amountWithdrawnFromCard)"
print("MobilePay purchase succeeded: Your have now paid for order with id \(orderId) and MobilePay transaction id \(transactionId) and the amount withdrawn from the card is: \(amountWithdrawnFromCard)")
self.alert(message: "You have now paid with MobilePay. Your MobilePay transactionId is \(transactionId)", title: "MobilePay Succeeded")
}, error: {( error: Error?) -> Void in
let dict: [AnyHashable: Any]? = error?.userInfo
let errorMessage: String? = (dict?.value(forKey: NSLocalizedFailureReasonErrorKey) as? String)
print("MobilePay purchase failed: Error code '(Int(error?.code))' and message '(errorMessage)'")
self.alert(message: errorMessage!, title: "MobilePay Error \(error?.code as! Int)")
self.alert(message: error as! String)
//TODO: show an appropriate error message to the user. Check MobilePayManager.h for a complete description of the error codes
//An example of using the MobilePayErrorCode enum
//if (error.code == MobilePayErrorCodeUpdateApp) {
// NSLog(@"You must update your MobilePay app");
//}
}, cancel: {(_ mobilePayCancelledPayment: MobilePayCancelledPayment?) -> Void in
print("MobilePay purchase with order id \(mobilePayCancelledPayment?.orderId!) cancelled by user")
self.alert(message: "You cancelled the payment flow from MobilePay, please pick a fruit and try again", title: "MobilePay Canceled")
})
}
我得到的问题是中间的错误,如下图所示。
我不确定自己做错了什么,也不确定如何“走出”错误,获取用户信息和错误信息
提前谢谢 您必须将强制转换
错误
转换为n错误
...
}, error: { error in // according to the ObjC code error is non-optional
let nsError = error as NSError
let userInfo = nsError.userInfo as! [String:Any]
let errorMessage = userInfo[NSLocalizedFailureReasonErrorKey] as! String
...
self.alert(message: errorMessage, title: "MobilePay Error \(nsError.code)")
基本上不注释编译器可以推断的类型,也从不使用
valueForKey
从用户信息字典中获取值。您必须将cast错误
桥接到NSError
...
}, error: { error in // according to the ObjC code error is non-optional
let nsError = error as NSError
let userInfo = nsError.userInfo as! [String:Any]
let errorMessage = userInfo[NSLocalizedFailureReasonErrorKey] as! String
...
self.alert(message: errorMessage, title: "MobilePay Error \(nsError.code)")
基本上不注释编译器可以推断的类型,也从不使用
valueForKey
从用户信息字典中获取值