使用的Xcode 7.0测试版中的异步块处理错误
我试图同时从AWS S3下载文本文件以验证不同的错误,并与下一段代码:使用的Xcode 7.0测试版中的异步块处理错误
... above here function receiving String parameters ruta, archivo, archivoLocal
let directorioURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! as NSURL
let archivoURL = directorioURL.URLByAppendingPathComponent("b\(archivoLocal)")
let downloadRequest = AWSS3TransferManagerDownloadRequest()
downloadRequest.bucket = ruta
downloadRequest.key = archivo
downloadRequest.downloadingFileURL = archivoURL
let transferManager = AWSS3TransferManager.defaultS3TransferManager()
let task = BFTask()
let executor = BFExecutor.mainThreadExecutor()
transferManager.download(downloadRequest).continueWithExecutor(executor, withBlock: { (task) -> AnyObject! in
if task.error != nil {
if task.error.domain == AWSS3TransferManagerErrorDomain {
self.processDomainErrorType(AWSS3TransferManagerErrorType(rawValue: task.error.code))
} else {
self.processError(task.error)
}
} else if task.result != nil {
do {
let mytext = try String(contentsOfURL: archivoURL, encoding: NSUTF8StringEncoding)
self.processResult(mytext)
} catch let urlerror as? NSError {
self.processError(urlerror)
}
}
...
我收到错误:
Invalid conversion from throwing function of type '(_) throws -> AnyObject!' to non-throwing function type '@convention(block) (BFTask!) -> AnyObject!'
我可以通过替换catch子句中删除错误:
} catch _ {
self.processError(NSError(domain: "String-ContentsOfURL Error", code: 100, userInfo: nil))
}
当然这样我永远不会知道为什么ContentsOfURL可能会失败的真正原因。
所有我可以找出为什么这个错误发生是因为此语法仅适用于OS X的应用程序和iOS的有效期在 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42 错误处理指南只允许第二语法除非你自己从一个投掷的错误对象ErrorType类型的枚举结构,因为我想从String对象,contentsOfURL函数捕获NSError,所以不是这种情况。
我希望有人能指导我完成这个任务,也许是XCode 7的一个测试版,catch语法仍然不完整,或许我不应该为什么这个函数失败的原因,但我认为确定什么是重要的使这个函数失败,并且在达到do-try-catch子句之前可以追踪和修复它。
除上述错误之外,我在任务变量赋值行中向BFTask()发出警告,声明“永不使用不可变值初始化任务”。我认为这是这个测试版的一个bug,它不包含模式来确认异步块中正在使用变量任务。如果我只是需要忽略它,我会非常感谢你对此的一些确认。
顺便说一下,我使用XCode 7 beta的唯一原因是因为我的客户想要在获取其苹果成员资格之前评估应用程序。
苹果斯威夫特2
替换NSError与错误类型自己明确的使用替代NSError与错误类型和你没有得到这种类型的编译器错误的。