【发布时间】:2021-07-26 12:35:13
【问题描述】:
在循环之前直接解开可选集合的 Swifty 方法是什么? 考虑以下几点:
let elements: [Element]?
for element in elements { ... }
其中elements 可能包含值。编译器产生错误:For-in loop requires '[Element]?' to conform to 'Sequence'; did you mean to unwrap optional?,与forEach类似。
使用where-关键字告诉编译器我只想在elements中有这样的值时进行迭代
for element in elements where elements != nil { ... }
不起作用。我基本上是在寻找一种方法来解开集合,在循环之前我不必写冗长的guard let 或if let。
我不希望使用返回未包装 self 的属性来扩展 Sequence,我只是认为它不是很优雅(包括强制展开)。
【问题讨论】:
-
for element in elements ?? [] {}? -
guard和if let有什么这么冗长的?这是安全地解开可选项并遵循常用模式的常规方法,这本身就是一种优势。 -
使用一些样式指南,您需要在任何要解包值的地方编写 3 行新代码,这只是 冗长的 imo。请在 Swift 社区论坛上查看thread,了解更多关于此的意见
-
将你的集合声明为常量是没有意义的
标签: swift collections optional