当我可以做if(var!= null)时,为什么选项有用?

The*_*mer 0 optional swift

题:

当我可以检查值是否为零时,为什么Swift会使用类似选项的东西?从本质上讲,我想知道这种语言功能的用途是什么,我正在学习Swift atm,从初学者的角度来看,它似乎多余/无用.

PS:我来自Javascript.


码:

做一些像我这样的事情似乎很荒谬:

if let normalImage = imageFromFaceBook {
  print(normalImage) // normalImage is a constant
} else {
  print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)

当我可以做的时候:

if (imageFromFacebook != nil) {
    print(imageFromFacebook) // normalImage is a constant
} else {
    print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)

像我通常在Javascript中做的那样:

if (imageFromFacebook != null) {
    print(imageFromFacebook) // normalImage is a constant
} else {
    print("There is no image")
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*all 7

我认为关键的区别在于,Optionals允许类型系统表达什么时候可能是零或绝对不会.在Javascript中,您无法表达"var x将永远不会被定义,因此无需在任何地方添加该检查",同样地,在Javascript中,您可能有一个期望具有值的var,并且忘记检查在某些情况下它是不确定的可能性.

Optionals将这种区别提升为类型系统中的实际类型,因此编译器可以检测(并警告您)何时在nil是必须考虑的可能性的情况下假定为非nil.类似地,编译器可以强制执行非可选类型,以永远不会将其设置为零值(这将违反期望非零值的相关代码的假设).

换句话说,如果没有Optionals,只有运行时检查才能确定某个值是否为零(无法知道).在Swift中,使用Optionals,类型本身可以指定是否必须考虑nil,因此编译器可以在构建时或甚至在您键入时验证安全性.