Swift - 可选


Swift 4 还引入了Optionals类型,它可以处理值的缺失。可选表示“有一个值,并且它等于 x”或“根本没有值”。

Optional 本身就是一种类型,实际上是 Swift 4 的新的超级枚举之一。它有两个可能的值:NoneSome(T),其中T是 Swift 4 中可用的正确数据类型的关联值。

这是一个可选的整数声明 -

var perhapsInt: Int?

这是一个可选的字符串声明 -

var perhapsStr: String?

上面的声明相当于显式地将其初始化为nil,这意味着没有值 -

var perhapsStr: String? = nil

让我们通过以下示例来了解可选值在 Swift 4 中的工作原理:

var myString:String? = nil

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

当我们使用 Playground 运行上述程序时,我们得到以下结果 -

myString has nil value

可选值类似于 Objective-C 中使用nil和指针,但它们适用于任何类型,而不仅仅是类。

强制展开

如果您将变量定义为可选,那么要从该变量中获取值,您必须将其解包。这只是意味着在变量末尾添加一个感叹号。

让我们举一个简单的例子 -

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

当我们使用 Playground 运行上述程序时,我们得到以下结果 -

Optional("Hello, Swift 4!")

现在让我们应用展开来获取变量的正确值 -

var myString:String?

myString = "Hello, Swift 4!"

if myString != nil {
   print( myString! )
} else {
   print("myString has nil value")
}

当我们使用 Playground 运行上述程序时,我们得到以下结果。

Hello, Swift 4!

自动拆包

您可以使用感叹号而不是问号来声明可选变量。此类可选变量将自动解包,您无需在变量末尾使用任何进一步的感叹号即可获取分配的值。让我们举一个简单的例子 -

var myString:String!
myString = "Hello, Swift 4!"

if myString != nil {
   print(myString)
} else {
   print("myString has nil value")
}

当我们使用 Playground 运行上述程序时,我们得到以下结果 -

Hello, Swift 4!

可选装订

使用可选绑定来查明可选值是否包含值,如果包含,则使该值可用作临时常量或变量。

if语句的可选绑定如下 -

if let constantName = someOptional {
   statements
}

让我们举一个简单的例子来了解可选绑定的用法 -

var myString:String?
myString = "Hello, Swift 4!"

if let yourString = myString {
   print("Your string has - \(yourString)")
} else {
   print("Your string does not have a value")
}

当我们使用 Playground 运行上述程序时,我们得到以下结果 -

Your string has - Hello, Swift 4!