问题:
为什么当我可以检查值是否为零时,Swift会使用类似选项的东西?从本质上讲,我想知道这种语言功能的用途是什么,我正在学习Swift atm,从初学者的角度来看,这似乎是多余/无用的。
P.S。:我来自Javascript。
CODE:
对我这样做似乎很荒谬:
if let normalImage = imageFromFaceBook {
print(normalImage) // normalImage is a constant
} else {
print("There is no image")
}
当我可以做的时候:
if (imageFromFacebook != nil) {
print(imageFromFacebook) // normalImage is a constant
} else {
print("There is no image")
}
就像我通常在Javascript中做的那样:
if (imageFromFacebook != null) {
print(imageFromFacebook) // normalImage is a constant
} else {
print("There is no image")
}
答案 0 :(得分:7)
我认为关键的区别在于,Optionals允许类型系统表达什么时候可能是零或绝对不会。在Javascript中,您无法表达" var x将永远不会被定义,因此无需在任何地方添加该检查"同样地,在Javascript中,您可能有一个期望具有值的var,并且忘记以检查在某些情况下它是否未定义的可能性。
Optionals将这种区别提升为类型系统中的实际类型,因此编译器可以检测(并警告您)何时在nil是必须考虑的可能性的上下文中假设为非nil。类似地,编译器可以强制执行非可选类型,以永远设置为零值(这将违反期望非零值的相关代码的假设)。
换句话说,如果没有Optionals,只有运行时检查可以确定甚至的值是否为零(无法知道)。在Swift中,使用Optionals,类型本身可以指定是否必须考虑nil,因此编译器可以在构建时或甚至在您键入时验证安全性。
答案 1 :(得分:0)
在某些语言中,例如Objective-C,任何对象引用都可以是nil
。
nil
。因此,为了使您能够检查某些内容是否为nil
,该内容必须首先是可选内容。
例如,你不能说:
let s : String = "howdy"
if s == nil {
这甚至都不会编译,因为s
永远不会成为nil
;它是一个字符串,而不是一个可选项。只有一个可选的nil
。这就是一个可选的 :它可以是nil
。