aufrufen Ich versuche, eines meiner Projekte von Swift 2.3 zu Swift 3.0 zu konvertieren, aber aus irgendeinem Grund bekomme ich den folgenden Fehler ..Konvertieren von Swift 2.3 in Swift 3.0 - Fehler, kann 'DataTask' nicht mit einer Argumentliste vom Typ '
Kann 'dataTask' mit einer Argumentliste vom Typ aufrufen '(mit: NSMutableURLRequest, completionHandler: (Data ?, UIRLResponse ?, NSError) -> Void)'
Überlastungen für ‚dataTask. 'existieren mit diesen teilweise übereinstimmenden Parameterlisten: (mit: URLRequest, completionHandler: @escaping (Daten ?, URLResponse ?, Fehler?) -> Void), (mit: URL, completionHandler : (Daten ?, URLResponse ?, Error) @escaping - unten vom code> Void)
Der Fehler in dieser Zeile zeigt ...
let task = session.dataTask(with: request, completionHandler: { (responseData:Data?, response:URLResponse?, error:NSError?) -> Void in
Jeder Vorschlag?
Hier ist der gesamte Code für die Funktion, in der der Fehler auftritt.
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")
}
}
Es verwendet eine 'URLRequest' wegzulassen, kein' NSMutableURLRequest'/'NSURLRequest'. – Rob
Sie haben Recht, das war das Hauptproblem. Danke –