为什么我可以在不写可选标记的情况下声明变量?

时间:2015-12-19 05:00:36

标签: ios swift optional

首先,我认为我的问题与“快速选择什么”的问题不同。因为我在问为什么我能做到这一点,而不是这个。

我是swift的新手。当我今晚学习这种神话般的语言时,我遇到了一个问题,我从未在编程语言中看到过这个标记 - “”。我搜索了一会儿。我知道现在有什么可选绑定。

但现在我有了一个新问题。 当我想声明一个非可选的变量时。我可以写这个语法:

var friend: String

但我不能写:

var friend: String = nil

要声明一个nil的变量,我只能使用optional:

var friend: String? = nil

让我们看看第一段代码。当刚声明新的变量朋友时,它的值是nil,对吗?因为我没有为它分配任何价值。但是根据可选的定义,比如第二段和第三段代码,我们不能将nil分配给非可选变量。

所以我的问题是为什么我可以声明一个没有可选标记但没有初始值的变量。这个问题可能很简单,但我真的不知道为什么会这样。

提前致谢!

2 个答案:

答案 0 :(得分:9)

Swift允许您声明一个非可选变量或常量而不在声明中初始化它,但您必须在使用它之前为其赋值。变量或常量的值是 nil(非选项永远不能为零) - 它根本没有定义的值。基本上你说你稍后会给它一个值,可能是基于计算结果或if语句。

如果您尝试使用非可选变量或常量而没有先为其赋值,则Swift会给您一个编译时错误。

答案 1 :(得分:0)

您设置的第一个值是带有字符串类型的未初始化变量。

编程中一个非常常见的模式是让一个操作可能会或可能不会返回一个值。在某些语言中,如javascript,当遇到空值时,只要我们的程序不依赖于该值继续,我们的程序就会继续运行。在其他语言中,例如java,null值可能导致NullPointerException并导致程序崩溃。

Swift解决这个问题的方法是选项。默认情况下,如果我们定义一个没有值的变量,编译器会抱怨。那么,为了声明一个在运行时可能有或没有值的值,我们需要添加一个?这被称为“在可选中包装我们的值”。这是因为我们确实将我们的值包装在Swifts可选类型中,从而赋予它价值。为了更好地了解最新情况,我们可以看看Swifts Optional枚举的方式。

enum Optional<T> {
    case None // has no value
    case Some(T) // has some value
}