假设我们定义了一组选项:
var arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
Run Code Online (Sandbox Code Playgroud)
我可以用一小段时间强行打开它: var arrayForCrash = arrayOfOptionals.map { $0! }
但这会让应用程序崩溃,还有其他任何简短的方法(没有明确展开)我如何解开一个可选数组?
Cen*_*nny 97
这个解决方案将为您提供一个新数组,其中所有值都被解开并且所有nil都被过滤掉了.
Swift 4.1:
let arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
let arrayWithNoOptionals = arrayOfOptionals.compactMap { $0 }
Run Code Online (Sandbox Code Playgroud)
Swift 2.0:
let arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
let arrayWithNoOptionals = arrayOfOptionals.flatMap { $0 }
Run Code Online (Sandbox Code Playgroud)
Swift 1.0:
let arrayOfOptionals: [String?] = ["Seems", "like", "an", nil, "of", "optionals"]
let arrayWithNoOptionals = arrayOfOptionals.filter { $0 != nil }.map { $0! }
Run Code Online (Sandbox Code Playgroud)
由于它是一个可选项数组,因此有些条目可能是nil.相反的力展开有!,使用零合并运算符,以轮流nils转换空字符串.
let arrayOfOptionals: [String?] = ["This", "array", nil, "has", "some", "nils", nil]
let array:[String] = arrayOfOptionals.map{ $0 ?? "" }
// array is now ["This", "array", "", "has", "some", "nils", ""]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18753 次 |
| 最近记录: |