gpt4 book ai didi

swift - 在 Swift 中安全处理隐式解包选项的简洁方法是什么?

转载 作者:行者123 更新时间:2023-11-30 13:24:48 25 4
gpt4 key购买 nike

我在这段代码的 if let 行上遇到了臭名昭著的 fatal error :在解包可选值时意外发现 nil 错误:

var displayShelves: [Shelf] {
get {
if let shelves = rootShelf.childShelves as NSArray as? [Shelf] {
return shelves
}
return []
}

原因是 rootShelf.childShelves 是一个 objective-c 类,它作为 var childShelves: NSMutableArray! 导入到 Swift 中! { get set },因此当我尝试将其转换为 [Shelf] 时,它可以等于 nil。我如何简洁地解开这个问题,而不需要很多额外的 if 或防护?我可以执行以下操作:

var displayShelves: [Shelf] {
get {
if rootShelf.childShelves != nil {
if let shelves = rootShelf.childShelves as NSArray as? [Shelf] {
return shelves
}
}
return []
}
}

但这正是可选链应该防止的代码!那么,有没有一种 Swift-y 的方法可以做到这一点?

最佳答案

如果x类型为T! ,然后x as T其作用类似于强制展开。您可以使用x as T?继续将其视为可选。

所以在你的情况下,你可以这样做 return rootShelf.childShelves <b><i>as NSArray?</i></b> as? [Shelf] ?? [] .

关于swift - 在 Swift 中安全处理隐式解包选项的简洁方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356506/

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