gpt4 book ai didi

swift - 在 Swift 中抛出 ErrorType 时不在 guard 语句中使用强制解包

转载 作者:行者123 更新时间:2023-11-28 15:31:05 24 4
gpt4 key购买 nike

我想从此代码中删除强制解包 (fetchRequestError!)。我知道它一定不会出问题,因为当 mainQueuePosts 为 nil 时,fetchRequestError 具有值(value)。但我想让它变得更好。我不想要返回

func fetchMainQueuePost(predicate predicate: NSPredicate? = nil,
sortDescriptors: [NSSortDescriptor]? = nil) throws -> [SeenPosts] {

let fetchRequest = NSFetchRequest(entityName: "SeenPosts")
let mainQueueContext = coreDataStack.mainQueueContext
var mainQueuePosts: [SeenPosts]?
var fetchRequestError: ErrorType?
mainQueueContext.performBlockAndWait() {
do {
mainQueuePosts = try mainQueueContext.executeFetchRequest(fetchRequest) as? [SeenPosts]
} catch let error {
fetchRequestError = error
}
}

guard let posts = mainQueuePosts else {
throw fetchRequestError!
}

return posts
}

我的解决方案,不好的是:

 guard let posts = mainQueuePosts else {
if let err = fetchRequestError {
throw err
}
fatalError()
}

fatalError() 永远不会执行。但我认为这不是个好主意

最佳答案

throw 的常用方法throws 方法中的错误本身就是通过去掉do - catch把错误交给调用者 block 。

作为标准fetch无论如何你不需要同步performBlockAndWait()你可以安全地强制向下转换为 [SeenPosts]因为获取请求是不同的。

如果获取成功,将返回数组,如果出现错误,将抛出错误。

func fetchMainQueuePost(predicate predicate: NSPredicate? = nil,
sortDescriptors: [NSSortDescriptor]? = nil) throws -> [SeenPosts] {

let fetchRequest = NSFetchRequest(entityName: "SeenPosts")
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = sortDescriptors
return try coreDataStack.mainQueueContext.executeFetchRequest(fetchRequest) as! [SeenPosts]
}

关于swift - 在 Swift 中抛出 ErrorType 时不在 guard 语句中使用强制解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44733270/

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