var iniArray = ["yikes", "bye"]
var wordDict: [Int: Array<String>]?
// initialize the wordDict
wordDict[0] = iniArray
现在让我们说我想在键0的值中添加另一个字符串元素。例如&#34; bike&#34;。所以它变成了:
wordDict[0] = ["yikes", "bye", "bike"]
我该怎么做?
答案 0 :(得分:2)
首先,值得指出您的代码中存在两个问题:
wordDict
wordDict
,就好像它不是可选的因为您使wordDict
成为可选项,所以在使用它之前必须始终确保它不是零。现在,在您的代码段中,wordDict
为零。
var iniArray = ["yikes", "bye"]
var wordDict: [Int: Array<String>]?
wordDict[0] = iniArray // error: value of optional type '[Int : Array<String>]?' not unwrapped; did you mean to use '!' or '?'?
使用?
:
var iniArray = ["yikes", "bye"]
var wordDict: [Int: Array<String>]?
wordDict?[0] = iniArray
wordDict?[0] = ["yikes", "bye", "bike"]
但如果这是你做出的唯一改变,那么你可能会对这个价值感到惊讶:
print(wordDict) // prints "nil"
这是因为在尝试将值(数组)放入其中之前,您从未实际初始化过字典。语法wordDict?
可以被认为是&#34;如果wordDict
不是nil,那么继续使用表达式的其余部分&#34;。因为它没有被初始化,所以密钥放入字典中从未发生过。以下代码有效:
var iniArray = ["yikes", "bye"]
var wordDict: [Int: Array<String>]? = [:] // now `wordDict` is initialized, but still an optional
wordDict?[0] = iniArray
wordDict?[0] = ["yikes", "bye", "bike"]
第二行,是字典初始化,可以用几种方式编写,这些都是一样的:
var wordDict: Dictionary<[String]>? = [:]
var wordDict: Dictionary<Int, [String]>? = [:]
var wordDict: Dictionary<Int, [String]>? = Dictionary()
var wordDict: [Int: [String]]? = [:]
var wordDict: [Int: [String]]? = Dictionary()
在上述所有情况中,您已初始化可选,空字典。每次尝试使用该字典时,都需要有条件地解包(使用?
)或强制解包(使用!
,但不鼓励强制解包)。
另外,如果要为该键附加到数组而不是完全替换它:
wordDict?[0]?.append("foo")
但这些都是值类型,所以我很确定这仍然会替换wordDict
中的数组。
答案 1 :(得分:2)
看起来像是代码的这一部分:
var wordDict: [Int: Array<String>]?
是无心的。在这里,您将整个字典设为可选,这没有多大意义。这就是你想要的(我想象):
var wordDict: [Int: Array<String>]
通常,首选使用数组速记:
var wordDict: [Int: [String]]
无论如何,要将此字典初始化为空字典,您需要这样做:
var wordDict: [Int: [String]] = [:]
然后,要添加初始数组,请执行以下操作:
wordDict[0] = ["yikes", "bye"]
最后,要附加额外元素,请使用optional chaining:
wordDict[0]?.append("bike")
如果您 打算让整个字典成为可选字段,那么您只需要一个额外的?
:
var wordDict: [Int: [String]]? = [:]
wordDict?[0] = ["yikes", "bye"]
wordDict?[0]?.append("bike")
wordDict?[0] // ["yikes", "bye", "bike"]
答案 2 :(得分:-2)
您可以在数组类上使用append方法
wordDict.append("bike")
参见参考