请参阅以下代码:
let myDict = [Int:Object]()
func task(newId: Int) {
var newObj = myDict[newId]
if (newObj == nil) { // Question (1)
newObj = Object()
myDict[newId] = newObj
newObj!.doSomething() // Question (2)
}
}
问题(1):我正在尝试查看与newId
相关联的对象是否已在myDict
中退出。如果没有,请创建一个并在myDict
中分配。我想知道是否有更好的方法来做到这一点?它现在看起来不是很“迅速”:)
问题(2):我必须在这里添加!
,但是我觉得有点奇怪,即使我刚刚在上面创建了一个新对象,我仍然需要强制解包它。 (Object
中没有可用的初始化程序)
任何建议帮助我/纠正我更好地了解Swift表示赞赏。感谢。
答案 0 :(得分:3)
var dict: Dictionary<Int,Int> = [1:1,2:2]
let o = dict[3] ?? Int(3)
// now do something with o, it goes from you dict, or it is the 'new' one
// finaly you can update you dict with 'new' o
dict[3] = o
来自apple docs
nil合并算子(a ?? b)打开一个可选的a if 包含一个值,如果a为nil,则返回默认值b。该 表达式a始终是可选类型。表达式b必须 匹配存储在。
中的类型
答案 1 :(得分:1)
我会这样写:
var myDict = [Int:Object]()
func task(newId: Int) {
if myDict[newId] == nil {
let newObj = Object()
myDict[newId] = newObj
newObj.doSomething()
}
}
在此块中 编辑,您将获得非空newObj
if let newObj = myDict[newId] {
newObj.doSomethingElse()
}