我正在尝试将我的一个项目从Swift 2.3转换为Swift 3.0,但有些原因我得到以下错误…
Cannot invoke ‘dataTask’ with an argument list of type'(with: NSMutableuRLRequest,completionHandler:(Data?,UIRLResponse?,NSError) -> Void)’
Overloads for ‘dataTask’ exist with these partially matching parameter lists: (with: URLRequest,completionHandler:@escaping(Data?,URLResponse?,Error?) -> Void),(with: URL,completionHandler: @escaping(Data?,Error?) -> Void)
let task = session.dataTask(with: request,completionHandler: { (responseData:Data?,response:URLResponse?,error:NSError?) -> Void in有什么建议吗?
func verifyReceipt(_ transaction:SKPaymentTransaction?){ let receiptURL = Bundle.main.appStoreReceiptURL! if let receipt = try? Data(contentsOf: receiptURL){ //Receipt exists let requestContents = ["receipt-data" : receipt.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))] //Perform request do { let requestData = try JSONSerialization.data(withJSONObject: requestContents,options: JSONSerialization.WritingOptions(rawValue: 0)) //Build URL Request let storeURL = URL(string: "https://buy.itunes.apple.com/verifyReceipt")// production URL //let storeURL = NSURL(string: "https:/sandBox.itunes.apple.com/verifyReceipt") // Testing URL let request = NSMutableuRLRequest(url: storeURL!) request.httpMethod = "Post" request.httpBody = requestData let session = URLSession.shared let task = session.dataTask(with: request,error:NSError?) -> Void in // do { let json = try JSONSerialization.jsonObject(with: responseData!,options: .mutableLeaves) as! NSDictionary print(json) if (json.object(forKey: "status") as! NSNumber) == 0 { // if let latest_receipt = json["latest_receipt_info"]{ self.validatePurchaseArray(latest_receipt as! NSArray) } else { let receipt_dict = json["receipt"] as! NSDictionary if let purchases = receipt_dict["in_app"] as? NSArray{ self.validatePurchaseArray(purchases) } } if transaction != nil { SKPaymentQueue.default().finishTransaction(transaction!) } dispatchQueue.main.sync(execute: { () -> Void in self.delegate?.managerDidRestorePurchases() }) } else { //Debug the receipt print(json.object(forKey: "status") as! NSNumber) } } catch { print(error) } }) task.resume() } catch { print(error) } } else { //Receipt does not exist print("No Receipt") } }
编译器需要URLRequest和Error
... var request = URLRequest(url: storeURL!) request.httpMethod = "Post" ... let task = session.dataTask(with: request,error:Error?) -> Void in
我建议省略所有类型的注释
let task = session.dataTask(with: request,completionHandler: { (responseData,response,error) -> Void in
原文地址:https://www.jb51.cc/swift/319900.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。