所以这在Swift中不起作用。
this
这更接近我的实际代码,但仍然是合成的。所以不要在结构上花太多时间。这也不起作用。
onCancelled
我这样做是一个丑陋的解决方法:
var a : Int? = 6 // simple mutable optional
if var b = a {
b = 10 // naive assumption that a === b
}
print(a) // prints 6, bad naive assumption
有没有更好的方法来写这个?
答案 0 :(得分:3)
您不需要if let
(或if var
)。
只需使用可选链接设置值:
company[com]?.department[department]?.employees[name]?.flag = true
问题:
if var employee = company[com]?.department[department]?.employees[name] {
employee.flag = True
}
您最终是否设置了本地变量employee
的标志,该标志是原始变量的副本。通过直接设置,可以避免在字典/数组/结构上完成所有副本。
答案 1 :(得分:0)
Swift中的字典和数组是结构,它们本身就是值类型,因此,无论何时将它们或它们的元素分配给您实际复制其值的任何内容。现在,在您的情况下,您有两个选择:
使用直接写入您的字典:
company[com]?.department[department]?.employees[name]
使用类而不是字典和结构。
偏离主题,如果您有简单的1级深度词典,您可以直接操作该词典的字节(尽管您必须非常小心):
var dict: [String: Any] = [
"a": 0,
"b": 2
]
print(dict) // ["b": 1, "a": 0]
withUnsafeMutablePointer(to: &dict["b"]) { ptr in
guard ptr.pointee != nil else { return }
ptr.pointee = 2
}
print(dict) // ["b": 2, "a": 0]