📅  最后修改于: 2023-12-03 14:52:35.097000             🧑  作者: Mango
在 Swift 中,数组可以包含可选值(optional values),这意味着数组中的元素可能包含 nil
值。当我们需要使用这些值时,我们必须解开这个可选值,否则编译器将不允许我们使用这些值。
以下是几种在 Swift 中解开具有可选值的数组的方法。
if let 语句可以让我们一次解开一个可选值。我们可以使用一个 for 循环来遍历数组中的元素,并通过 if let 语句解开每个元素的可选值。
let optionalArray: [Int?] = [1, 2, nil, 4, nil, 6]
for optionalValue in optionalArray {
if let value = optionalValue {
print(value)
}
}
在这个例子中,我们定义了一个名为 optionalArray
的数组,其中包含了一些可选的整数值。我们使用 for 循环遍历数组中的元素,并将每个元素的可选值解开。如果解开成功,我们就打印出这个值。
输出结果:
1
2
4
6
我们还可以使用数组的 map
方法来将解开数组中每个元素的可选值,并返回一个包含非空值的数组。
let optionalArray: [Int?] = [1, 2, nil, 4, nil, 6]
let filteredArray = optionalArray.compactMap { $0 }
print(filteredArray)
在这个例子中,我们使用 compactMap
方法过滤出非空的元素并返回一个新数组。这里我们只传入了一个简单的闭包 { $0 }
,该闭包返回它的输入,这里的输入就是数组中的每个元素。
输出结果:
[1, 2, 4, 6]
我们还可以使用 ?? 运算符来设置一个默认值,以替代数组中的 nil
值。
let optionalArray: [Int?] = [1, 2, nil, 4, nil, 6]
let newArray = optionalArray.map { $0 ?? 0 }
print(newArray)
在这个例子中,我们使用 map
方法和 ??
运算符替换掉了数组中的 nil
值。因为数组中的元素类型是可选的整数,所以我们在 ?? 运算符的右侧设置了默认值 0。
输出结果:
[1, 2, 0, 4, 0, 6]
另一种常见的做法是使用 flatMap 方法,这个方法会将可选值解开,并将非空值放到一个新数组中。
let optionalArray: [Int?] = [1, 2, nil, 4, nil, 6]
let newArray = optionalArray.flatMap { $0 }
print(newArray)
在这个例子中,我们使用 flatMap
方法将可选值解包并返回一个非空数组。这里的输入与 compactMap
方法相同,都是一个简单的闭包 { $0 }
,该闭包返回它的输入,这里的输入就是数组中的每个元素。
输出结果:
[1, 2, 4, 6]
以上是在 Swift 中解开具有可选值的数组的几种常用方法。你可以根据实际需要选择适合你的解决方案。