首页 文章

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

提问于
浏览
6

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

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

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

var friend: String

但我写不出来:

var friend: String = nil

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

var friend: String? = nil

让我们看看第一段代码 . 刚刚声明新变量 friend 时,它的值是nil,对吧?因为我没有为非可选变量分配nil .

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

提前致谢!

2 回答

  • 0

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

    如果您尝试使用非可选变量或常量而不首先为其分配值,Swift将给出编译时错误 .

  • 9

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

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

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

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

相关问题