如何为空[String: [String]]类型字典的新键关联数组追加值?
解决Swift字典中向不存在的键的数组追加值的问题
嘿,你猜的完全正确!问题核心就是当你执行exampleDict["test"].append("test")时,因为键"test"在空字典里不存在,exampleDict["test"]会返回nil。虽然Swift的可选链允许你在nil上调用方法(不会崩溃),但这个调用实际上不会做任何事情,所以字典还是保持空状态。
下面给你几种实用的解决方案,从基础到简洁写法都有:
基础检查初始化法
先判断键是否存在,如果不存在就先创建一个空数组,再追加值:var exampleDict: [String: [String]] = [:] // 先确保键对应的数组存在 if exampleDict["test"] == nil { exampleDict["test"] = [] } // 现在可以安全追加了 exampleDict["test"]?.append("test")或者用可选绑定的方式,先取出现有数组(如果有的话),追加后再存回去:
var exampleDict: [String: [String]] = [:] if var existingArray = exampleDict["test"] { existingArray.append("test") exampleDict["test"] = existingArray } else { // 键不存在,直接赋值包含新元素的数组 exampleDict["test"] = ["test"] }利用默认值简化操作
可以通过空合运算符??快速获取现有数组或空数组,追加后再赋值回去:var exampleDict: [String: [String]] = [:] var currentArray = exampleDict["test"] ?? [] currentArray.append("test") exampleDict["test"] = currentArraySwift 4+ 最简洁写法
Swift 4及以后版本支持给字典下标设置default参数,当键不存在时会自动创建指定的默认值(这里是空数组),然后你可以直接调用append:var exampleDict: [String: [String]] = [:] exampleDict["test", default: []].append("test")这种写法一行搞定,既简洁又直观,非常推荐使用!
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

