当我执行NSURLConnection.sendAsynchronousRequest
时,它总是显示相同的错误:
来自类型'(NSURLResponse?,NSData?,NSError?)的抛出函数的无效转换抛出 - > Void'到非投掷函数类型'(NSURLResponse?,NSData?,NSError?) - >无效“”
这是代码:
progressBar.hidden = false
progressBar.progress = 0
var am = Int(ammount * 100)
var amToOwner = Int()
let process = Float(100-fee)*Float(ammount)/Float(100)
amToOwner = Int(self.roundToPlaces(0, number: process))
progressBar.progress = 33.3
let urlPath: String = "https://api.stripe.com/v1/charges"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request1.HTTPMethod = "POST"
var stringPost = String()
stringPost="amount=\(am)¤cy=eur&source=" + self.tok + "&description=\"\(description)\"&destination[account]=\(ownerAccountID!)&destination[amount]=\(try! Int(amToOwner*100))" // Key and Value
stringPost = stringPost.stringByReplacingOccurrencesOfString("\\", withString: "")
print(stringPost)
let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)
request1.timeoutInterval = 60
request1.HTTPBody=data
request1.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request1.setValue("Bearer " + _secretKey, forHTTPHeaderField: "Authorization")
request1.HTTPShouldHandleCookies=false
print(request1.allHTTPHeaderFields)
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in)
self.progressBar.progress = 66.6
self.tok = ""
do {
self.progressBar.progress = 100
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
print("ASynchronous\(jsonResult)")
if jsonResult.valueForKey("error") != nil{
let alert = UIAlertController()
alert.title = "Error"
let callFunction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(callFunction)
alert.message = String(jsonResult.valueForKey("error")!.valueForKey("message")!)
self.presentViewController(alert, animated: true, completion: nil)
} else {
let alert = UIAlertController()
let callFunction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(callFunction)
alert.title = jsonResult.valueForKey("outcome")!.valueForKey("seller_message")! as! String
var amm = jsonResult.valueForKey("amount")!.floatValue / 100
alert.message = "Ammount: \(amm) \(jsonResult.valueForKey("currency")!)\n Description: \(jsonResult.valueForKey("description")!)"
self.presentViewController(alert, animated: true, completion: nil)
self.progressBar.hidden = true
}
}
} catch let error as NSError {
self.progressBar.progress = 100
print(error.localizedDescription)
self.progressBar.hidden = true
}
})
错误是什么?你能帮帮我吗?
我正在使用XCode 7.3.1
答案 0 :(得分:0)
我找到了解决方案:
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
self.progressBar.progress = 66.6
self.tok = ""
self.progressBar.progress = 100
if let jsonResult = try? NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
print("ASynchronous\(jsonResult)")
if jsonResult!.valueForKey("error") != nil{
let alert = UIAlertController()
alert.title = "Error"
let callFunction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(callFunction)
alert.message = String(jsonResult!.valueForKey("error")!.valueForKey("message")!)
self.presentViewController(alert, animated: true, completion: nil)
} else {
let alert = UIAlertController()
let callFunction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(callFunction)
alert.title = jsonResult!.valueForKey("outcome")!.valueForKey("seller_message")! as! String
var amm = jsonResult!.valueForKey("amount")!.floatValue / 100
alert.message = "Ammount: \(amm) \(jsonResult!.valueForKey("currency")!)\n Description: \(jsonResult!.valueForKey("description")!)"
self.presentViewController(alert, animated: true, completion: nil)
self.progressBar.hidden = true
}
}
})