我正在尝试将我的项目之一从Swift 2.3转换为Swift 3.0,但是由于某些原因,我收到以下错误信息…
无法使用类型为’的参数列表调用’dataTask’(with:NSMutableURLRequest,completeHandler:(Data ?, UIRLResponse ?, NSError)-> Void)’ 这些部分匹配的参数列表存在’dataTask’的重载:(带有:URLRequest,completionHandler:@escaping(Data?,URLResponse?,Error?)->无效),(带有:URL,completionHandler:@escaping(Data ?, URLResponse ?,错误?)->无效)
无法使用类型为’的参数列表调用’dataTask’(with:NSMutableURLRequest,completeHandler:(Data ?, UIRLResponse ?, NSError)-> Void)’
这些部分匹配的参数列表存在’dataTask’的重载:(带有:URLRequest,completionHandler:@escaping(Data?,URLResponse?,Error?)->无效),(带有:URL,completionHandler:@escaping(Data ?, URLResponse ?,错误?)->无效)
错误显示在下面的代码行中…
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, completionHandler: { (responseData:Data?, response:URLResponse?, 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
URLRequest
Error
... var request = URLRequest(url: storeURL!) request.httpMethod = "Post" ... let task = session.dataTask(with: request, completionHandler: { (responseData:Data?, response:URLResponse?, error:Error?) -> Void in
我建议省略所有类型注释
let task = session.dataTask(with: request, completionHandler: { (responseData, response, error) -> Void in