我正在尝试将我的一个项目从 Swift 2.3 转换为 Swift 3.0,但出于某种原因,我收到以下错误...
无法使用类型为'的参数列表调用'dataTask'(使用:NSMutableURLRequest, completionHandler:(Data?, UIRLResponse?, NSError)-
“dataTask”的重载与这些部分匹配的参数列表一起存在:(with: URLRequest,completion handler:@ 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")
}
}
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
https://swift.org/migration-guide-swift3/
编译器需要 URL 请求
和错误
...
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
问题内容: 我正在尝试将我的项目之一从Swift 2.3转换为Swift 3.0,但是由于某些原因,我收到以下错误信息… 无法使用类型为’的参数列表调用’dataTask’(with:NSMutableURLRequest,completeHandler:(Data ?, UIRLResponse ?, NSError)-> Void)’ 这些部分匹配的参数列表存在’dataTask’的重载:(带
问题内容: 听起来很荒谬,但是我无法修复这段代码: 无论我如何写闭包,我总是会遇到此错误: 无法使用类型为’ ‘ 的参数列表调用’filter ‘ 定义如下: 并且是Swift类(不继承自NSObject) 我在许多其他地方都使用了几乎相同的产品,而没有出现问题。有什么建议? 问题答案: 如果您不符合以下条件,则会收到该错误:
问题内容: 当我编写代码以使用indexOf从数组中查找项目时,它向我显示了上述错误。这是我的代码:- 问题答案: 为了使用的,必须采取Equatable协议。只有采用此协议,列表才能将一个项目与其他项目进行比较以找到所需的索引
我刚刚迁移到Xcode7/IOS9,我的部分代码不兼容。 我从Xcode得到以下错误: “ 不能使用类型为”(字符串)“的参数列表调用”计数“” 这是我的代码:
我收到此错误,并且是 Swift 的新手。我想取数组的最后 5 个点 无法将“ArraySlice”类型的值转换为预期的参数类型“[CGPoint]”
使用新的Swift 1.2更新到Xcode 6.3.1,旧方法更改为,但是当我切换到使用时,它总是抛出此错误消息: 无法使用类型为“(String)”的参数列表调用“count” 这个片段是我从Apple doc复制过来的,但是还是不行。