Swift:正确使用可选的if语句

时间:2018-06-19 00:17:05

标签: swift optional

所以这在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

有没有更好的方法来写这个?

2 个答案:

答案 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中的字典和数组是结构,它们本身就是值类型,因此,无论何时将它们或它们的元素分配给您实际复制其值的任何内容。现在,在您的情况下,您有两个选择:

  1. 使用直接写入您的字典:

    company[com]?.department[department]?.employees[name]
    
  2. 使用类而不是字典和结构。

  3. 偏离主题,如果您有简单的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]