基本上[String?]
和[String]?
之间有什么区别
如果我定义像var myStringArray:[String?]
这样的数组,我不需要使用!
来解包它,但是当我将数组定义为var myStringArray:[String]?
时,我必须使用{{1}强制解包它}
我在这里失踪了什么?
答案 0 :(得分:5)
[String?]
是一个可选字符串数组。数组不能为零,但字符串可以
[String]?
是一个可选的字符串数组。数组可以是零,但字符串可以是
对于[String?]
,您不必打开数组,但必须打开数组中的每个字符串。对于[String]?
,您需要在使用之前解开数组,而不是数组中的字符串。
let arrayOfOptionalStrings: [String?] = [ "a", nil, "c" ]
for string in arrayOfOptionalStrings {
if let string = string {
print(string)
}
}
var optionalArrayOfStrings: [String]? = [ "a", "b", "c" ]
if let array = optionalArrayOfStrings {
for string in array {
print(string)
}
}
optionalArrayOfStrings = nil
答案 1 :(得分:3)
[String?]
是 Optional Strings 的数组。数组本身不是可选的,但包含Optionals。
[String]?
是字符串的可选数组。数组本身是一个Optional,包含非Optionals。
答案 2 :(得分:2)
for [String?]你正在创建一个字符串选项数组,每个索引值都是一个可选字符串