Swift2 完成处理程序给定:更新到swift 2后,表达式类型不明确,没有更多上下文
我正在使用Socrata为swift创建的SODA客户端,我刚刚更新到XCode 7和swift 2,发现了一些问题。我无法解决的一个问题是,当完成处理程序发现错误时,它不接受“syncCompletion(.error(reqError))”这一行,该行应该得到错误并返回到主线程 我在这里看到了许多相同描述的错误“表达式类型在没有更多上下文的情况下是不明确的”,但在完成处理程序中没有,我看到了一个使用do-catch的错误,这是不同的。我对斯威夫特了解不够,无法找到改变现状的方法 一些答案认为您应该重写代码,因为swift 2中的某些类型可能会发生更改,但我不知道从何处开始重写 提前感谢你的帮助Swift2 完成处理程序给定:更新到swift 2后,表达式类型不明确,没有更多上下文,swift2,xcode7,completionhandler,socrata,Swift2,Xcode7,Completionhandler,Socrata,我正在使用Socrata为swift创建的SODA客户端,我刚刚更新到XCode 7和swift 2,发现了一些问题。我无法解决的一个问题是,当完成处理程序发现错误时,它不接受“syncCompletion(.error(reqError))”这一行,该行应该得到错误并返回到主线程 我在这里看到了许多相同描述的错误“表达式类型在没有更多上下文的情况下是不明确的”,但在完成处理程序中没有,我看到了一个使用do-catch的错误,这是不同的。我对斯威夫特了解不够,无法找到改变现状的方法 一些答案认为
var task = session.dataTaskWithRequest(request, completionHandler: { data, response, reqError in
// We sync the callback with the main thread to make UI programming easier
let syncCompletion = { res in NSOperationQueue.mainQueue().addOperationWithBlock { completionHandler (res) } }
// Give up if there was a net error
if reqError != nil {
syncCompletion(.Error (reqError))
return
}
// Try to parse the JSON
// println(NSString (data: data, encoding: NSUTF8StringEncoding))
var jsonError: NSError?
var jsonResult: AnyObject!
do {
jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
} catch var error as NSError {
jsonError = error
jsonResult = nil
} catch {
fatalError()
}
if let error = jsonError {
syncCompletion(.Error (error))
return
}
// Interpret the JSON
if let a = jsonResult as? [[String: AnyObject]] {
syncCompletion(.Dataset (a))
}
else if let d = jsonResult as? [String: AnyObject] {
if let e : AnyObject = d["error"] {
if let m : AnyObject = d["message"] {
syncCompletion(.Error (NSError(domain: "SODA", code: 0, userInfo: ["Error": m])))
return
}
}
syncCompletion(.Dataset ([d]))
}
else {
syncCompletion(.Error (NSError(domain: "SODA", code: 0, userInfo: nil)))
}
})
解决了,我替换了:
if reqError != nil
与
以及:
与
已解决,我将其替换为:--if reqError!=nil--by--let error=reqError--and:--syncCompletion(.error(reqError))--by--syncCompletion(.error(error))--
if let error = reqError
syncCompletion(.Error (reqError))
syncCompletion(.Error (error))