gpt4 book ai didi

ios - 在异步 block 中使用xcode 7.0 beta处理错误

转载 作者:行者123 更新时间:2023-12-03 07:59:43 26 4
gpt4 key购买 nike

我正在尝试从AWS S3下载文本文件以及下一段代码来验证不同的错误:

... 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!'

我从 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID10获得了“do {试用} catch”语法

我可以通过将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对象contentOfOfURL函数捕获NSError。

我希望有人可以指导我完成此工作,也许是XCode 7 Beta,catch语法仍然不完整,或者我不应该担心此函数失败的原因,但是我认为确定使此函数失败的原因很重要是否可以在到达do-try-catch子句之前对其进行跟踪和修复。

除了上述错误外,我还在BFTask()的任务变量分配行中收到一条警告,说“从未使用不可变值'task'的初始化”。我认为这是此Beta版本的错误,它不包含用于确认异步块中正在使用可变任务的模式。如果对此我感到非常感谢,如果我只需要忽略它,我将不胜感激。

顺便说一句,我使用XCode 7 beta的唯一原因是因为我的客户希望在获得苹果成员(member)资格之前对其进行评估。

最佳答案

Apple在Swift 2中将NSError替换为ErrorType。

用ErrorType替换您自己对NSError的明确使用,您不会得到这种类型的编译器错误。

关于ios - 在异步 block 中使用xcode 7.0 beta处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30992434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com