我刚刚升级到Xcode 6.3和Swift 1.2,我正在更新语法。在我的项目中,我使用TCBlobDownloadSwift进行一些常规下载任务。更新后,我收到编译错误"' NSError'不能从框架中转换为' NSError?'"来自以下方法:
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError sessionError: NSError?) {
let download = self.downloads[task.taskIdentifier]!
var error: NSError? = sessionError ?? download.error
// Handle possible HTTP errors
if let response = task.response as? NSHTTPURLResponse {
// NSURLErrorDomain errors are not supposed to be reported by this delegate
// according to https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html
// so let's ignore them as they sometimes appear there for now. (But WTF?)
if !validateResponse(response) && (error == nil || error!.domain == NSURLErrorDomain) {
error = NSError(domain: kTCBlobDownloadErrorDomain,
code: TCBlobDownloadError.TCBlobDownloadHTTPError.rawValue,
userInfo: [kTCBlobDownloadErrorDescriptionKey: "Erroneous HTTP status code: \(response.statusCode)",
kTCBlobDownloadErrorFailingURLKey: task.originalRequest.URL,
kTCBlobDownloadErrorHTTPStatusKey: response.statusCode])
}
}
// Remove reference to the download
self.downloads.removeValueForKey(task.taskIdentifier)
dispatch_async(dispatch_get_main_queue()) {
download.delegate?.download(download, didFinishWithError: error, atLocation: download.resultingURL)
return
}
}
}
我不能再将NSError
(用initWithDomain:code:userInfo
初始化)分配给error
(NSError?)。 Swift 1.2有什么变化?我该如何解决这个问题?
在网络相关功能中返回NSError?
似乎是正常的,尤其是在使用objC库的情况下。如果我使用NSError
,NSError?
或NSErrorPointer
,我现在对提出错误的最佳方法感到困惑吗?
答案 0 :(得分:1)
所以我解决了这个问题,结果证明为NSError分配一个可选值并没有错。我传递给userInfo
的init方法的NSError
字典会从NSURLSessionTask
的{{1}}获取一个OriginalRequest
的网址。此属性现在更改为NSURLRequest
。我改为NSURL?
并且有效。
我想我会继续使用task.originalRequest.URL!
传递错误。