Swift 如果(var!=null)可以执行,为什么选项有用?

Swift 如果(var!=null)可以执行,为什么选项有用?,swift,optional,Swift,Optional,问题: 当我可以检查值是否为零时,为什么Swift会使用optionals之类的东西?本质上,我想知道这样一种语言功能有什么用,我正在学习Swift atm,从初学者的角度来看,它似乎是多余的/无用的 附言:我来自Javascript 代码: 在我看来,这样做似乎很荒谬: if let normalImage = imageFromFaceBook { print(normalImage) // normalImage is a constant } else { print("Ther

问题:

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

附言:我来自Javascript

代码:

在我看来,这样做似乎很荒谬:

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")
}

在某些语言中,如Objective-C,任何对象引用都可以为零

Swift更清晰、更安全。在Swift中,只有可选项可以为零。因此,为了让您能够检查某些内容是否可以为零,该内容首先必须是可选的

例如,你不能说:

let s : String = "howdy"
if s == nil {

这甚至不会编译,因为s永远不能为零;这是一个字符串,不是可选的。只有可选项可以为零。这就是可选对象的含义:它是一个可以为零的对象。

在某些语言中,如Objective-C,任何对象引用都可以为零

Swift更清晰、更安全。在Swift中,只有可选项可以为零。因此,为了让您能够检查某些内容是否可以为零,该内容首先必须是可选的

例如,你不能说:

let s : String = "howdy"
if s == nil {

这甚至不会编译,因为s永远不能为零;这是一个字符串,不是可选的。只有可选项可以为零。这就是可选项的含义:它是一个可以为零的东西。

我认为关键的区别在于,可选项允许类型系统表示可能为零或肯定不会为零的东西。在Javascript中,您无法表示var x永远不会被未定义,因此无需到处添加该检查。同样,在Javascript中,您可能有一个期望值的var,但在某些情况下忘记检查它是否未定义

Optionals将这种区别提升为类型系统中的实际类型,因此当您在必须考虑nil可能性的上下文中假设非nil时,编译器可以检测并警告您。同样,编译器可以强制非可选类型永远不要设置为nil值,这将违反依赖代码期望非nil值的假设


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

我认为关键的区别在于Optionals允许类型系统表示什么时候可能是nil,什么时候肯定不会。在Javascript中,您无法表示var x永远不会被未定义,因此无需到处添加该检查。同样,在Javascript中,您可能有一个期望值的var,但在某些情况下忘记检查它是否未定义

Optionals将这种区别提升为类型系统中的实际类型,因此当您在必须考虑nil可能性的上下文中假设非nil时,编译器可以检测并警告您。同样,编译器可以强制非可选类型永远不要设置为nil值,这将违反依赖代码期望非nil值的假设


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

您不能说someVar!=nil,除非someVar是可选的。所以这个问题毫无意义,你可能想的是C指针或Objective-C实例指针,它们可以被检查为nil/NULL。Swift选项是一个更一般的概念,可用于任何类型,而不仅仅是指针。请阅读。阅读所有答案。@TheProgrammer在使用javascript时,您在尝试访问空引用中的内容时是否遇到过TypeError?有没有想过是否有一种静态的、有保证的方式,编译器可以重复检查您是否忘记检查null?这就是可选的。非行动组注意:天哪,伙计们,冷静一点。这是一个非常明确的问题。大多数编程语言可能是通过计数,确切地使用,允许任何引用为空,如java、JS、Ruby、Python、C、C++、Objc、SimultTalk。如果你来到一个任何东西都可以为空的世界,问一个选项在Swift中的意义是什么是一个完全合理的问题。你不能说someVar!=nil,除非someVar是可选的。所以这个问题毫无意义,你可能想的是C指针或Objective-C实例指针,它们可以被检查为nil/NULL。Swift optionals是一个更为通用的概念,可用于任何类型
,不仅仅是指针。请阅读。阅读所有答案。@TheProgrammer在使用javascript时,您在尝试访问空引用中的内容时是否遇到过TypeError?有没有想过是否有一种静态的、有保证的方式,编译器可以重复检查您是否忘记检查null?这就是可选的。非行动组注意:天哪,伙计们,冷静一点。这是一个非常明确的问题。大多数编程语言可能是通过计数,确切地使用,允许任何引用为空,如java、JS、Ruby、Python、C、C++、Objc、SimultTalk。如果你来到一个任何东西都可以为空的世界,那么问一个选项在Swift中的意义是完全合理的问题。我知道。我了解optionals在Swift中的工作原理。我只是不明白他们提供了什么相比,只是简单地检查我知道。我了解optionals在Swift中的工作原理。我只是不明白他们提供了什么相比,只是简单地检查尼尔森这正是我要找的!感谢您提供了一个清晰简洁的答案:还值得注意的是,Optional扩展到了不仅仅是引用,因为它允许值类型structs、enum、tuple也可以为null,而无需装箱、移动到堆中并由null引用访问。这正是我要找的!感谢您提供了一个清晰简洁的答案:还值得注意的是,Optional扩展到了不仅仅是引用,因为它允许值类型structs、enum、tuple也可以为null,而无需装箱、移动到堆中并通过可为null的引用访问