【发布时间】:2016-06-12 10:31:04
【问题描述】:
我想创建一个没有值的 Int(一个已经存在的变量)。如果我这样做;
number = Int()
那么它的值仍然是0。我什么都不想要,一个不存在的价值。
【问题讨论】:
-
唯一的方法是可选的
Int? -
var number: Int?
我想创建一个没有值的 Int(一个已经存在的变量)。如果我这样做;
number = Int()
那么它的值仍然是0。我什么都不想要,一个不存在的价值。
【问题讨论】:
Int?
var number: Int?
实际上,每种类型都可以设置为空值,即nil!
要创建一个可以设置为nil的变量,你需要在最后显式地写一个?或!(后面会讲到区别)的类型名称。
例如,如果您想要一个可以设置为nil 的Int,请声明一个类型名称为的变量:
var myInt: Int
然后你添加一个?:
var myInt: Int?
然后,您可以将myInt 设置为nil,或者您想要的任何值:
myInt = nil
myInt = 0
这个类型名称-?表示法在 Swift 中称为“可选类型”。
不仅可以在变量和常量中使用可选项,还可以在方法/函数签名中使用:
func myUselessFunc(value: Int?) -> Int? {
return value
}
好的,那么! 和? 有什么区别?
! 的作用类似于 Java 和 C# 中的引用类型。而? 就像! 的更安全版本。
假设有一个可选的Int,称为myInt。你想访问它的description。
如果myInt 被声明为let myInt: Int?,
myInt?.description
如果myInt 被声明为let myInt: Int!
myInt.description
注意,使用问号,每次需要访问myInt的属性/方法时,都需要在末尾添加一个问号。这称为“解开可选类型”。
带有! 后缀的类型称为“隐式展开的可选类型”。使用这些类型时,您不需要打开它。但是,如果myInt 是nil,就会报错! ? 类型不会发生这种情况,因为如果 myInt 是 nil,整个表达式将只返回 nil。
这是我认为您在第一次使用可选项时应该注意的一点。
【讨论】:
您需要一个可选的Int。通过提出一个问题'?标记您将该变量初始化为 nil。
var number: Int?
【讨论】: