我在此代码中的fatal error: unexpectedly found nil while unwrapping an Optional value
行上收到了臭名昭着的if let
错误:
var displayShelves: [Shelf] {
get {
if let shelves = rootShelf.childShelves as NSArray as? [Shelf] {
return shelves
}
return []
}
原因是rootShelf.childShelves
是一个客观的C类,它被导入到Swift中var childShelves: NSMutableArray! { get set }
,因此当我尝试将其转换为[Shelf]
时,它可以等于{ {1}}。如何简洁地解开这个,没有太多额外的ifs或警卫?我可以做到以下几点:
nil
但这是可选链接应该阻止的那种代码!那么,有没有一种Swift-y方法可以做到这一点?
答案 0 :(得分:0)
rootShelf.childShelves
nil
时,以下内容不会崩溃:
var displayShelves: [Shelf] {
get {
if rootShelf.childShelves != nil, let shelves = rootShelf.childShelves as NSArray as? [Shelf] {
return shelves
}
return []
}
}
我并非100%确定,
运算符可以保证像这样短路。
答案 1 :(得分:0)
如果x
的类型为T!
,那么x as T
就像强制解包一样。您可以使用x as T?
继续将其视为可选。
因此,在您的情况下,您可以执行return rootShelf.childShelves as NSArray? as? [Shelf] ?? []
。