我正在尝试将我的一个项目从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