Swift 可选类型的使用

Swift 可选类型的使用

可选类型是Swift编码中的基本部分。可选类型的作用是将良好的代码与不良的代码分开,并避免崩溃。每种编程语言都有一些预防措施来避免崩溃。在这方面,Swift更加实用,可选类型可以使你的代码无崩溃。 ** .

声明

enum Optional 

可选类型 是在使用可选值时使用的,即使您从未输入过Optional这个单词。Swift的类型系统通常会显示包装类型的名称,然后跟一个问号(?),而不是显示完整的类型名称。

例如 ,如果一个变量的类型是 Int? ,它与写作Optional是相同的,只是另一种简洁的写法,以使代码易于阅读和简化。

请看以下示例。

在下面的代码示例中,shortForm和longForm的类型是相同的:

let shortForm: Int? = Int("143")
Or
let longForm: Optional = Int("143") 
//Both are same 

Optional(可选类型)可以代表 没有任何值有值 的情况。可选类型允许将 nil 作为没有值的表示。可选类型是一个泛型枚举,有两个case:

  • Optional.none :等同于nil字面量。
  • Optional.some(Wrapped) :它存储了一个包装后的值。

示例

let number: Int? = Optional.some(143)
let noNumber: Int? = Optional.none
print(noNumber == nil)
// Prints "true"

输出:

true

以上程序中的问号(?)表示它是一个可选变量。如果在变量声明的末尾看到一个问号,那么它绝对是可选的,它可能包含一个值,也可能没有。所以,在程序的某个部分,你不知道变量是否有值,那么标记它为可选。

现在,看看这个示例:

这里我们试图打印变量’numberOfStudents’的值。

var numberOfStudents : Int?
print(numberOfStudents!)

在这里,变量末尾的感叹号(!)用于解包值。但是,如果尝试执行代码,代码将崩溃。那是因为你强制对一个没有值的可选变量进行解包。如果变量中没有值,程序将崩溃。

为变量设置一个值

如果在强制解包值之前给变量设置一个值,代码就不会崩溃,但这不是一个良好的编码实践,是对可选变量的滥用。

var numberOfStudents : Int?
numberOfStudents = 30
print(numberOfStudents!)

输出:

30

在强制解包可选项之前,您可以进行nil检查。

示例:

var numberOfStudents : Int?
if numberOfStudents != nil {
print(numberOfStudents!)
}

现在,您的程序不会崩溃,因为您在对可选变量进行nil检查之后才进行强制解包。

var numberOfStudents : Int?
if let studentCount = numberOfStudents {
print(studentCount) // It is same as print(numberOfStudents!)
}

上述方法将检查可选变量’numberOfStudents’是否包含某个值。如果存在,则将其复制到一个称为studentCount的常量中,然后只有代码块才会执行。

强制解包

当将变量定义为可选类型时,要从该变量中获取值,就必须对其进行解包。强制解包是在变量末尾加上一个感叹号的过程。

让我们看一个示例来说明清楚。

示例:(在应用强制解包之前)

var userString:String?
userString = "Hello World"
if userString != nil {
   print(userString)
} else {
   print("userString has nil value")
}

输出: 当您执行上述代码时,它将给出以下输出:

Optional("Hello World")

示例:(应用解包后)

现在,我们应用解包以获取变量的正确值。

 var userString:String?
userString = "Hello World"
if userString != nil {
   print(userString!)
} else {
   print("userString has nil value")
}

输出:

Hello World

自动展开

自动展开提供了一种方式,其中可选变量使用感叹号而不是问号声明。通过这种方式,变量将自动展开,您无需在变量末尾使用任何进一步的感叹号来获取分配的值。

让我们看一个示例。

示例

var userString:String!
userString = "Hello World"
if userString != nil {
   print(userString)
} else {
   print("userString has nil value")
}

输出:

Hello World

Swift可选绑定

可选绑定用于判断可选类型是否包含值,并在有值的情况下,将该值作为临时常量或变量。您可以使用任何可选绑定控制结构,包括 if let、guard let 等。

让我们举个示例来看看 if 语句中的可选绑定:

示例

var userString:String?
userString = "Hello world"
if let myString = userString {
   print("The value of my string is - \(myString)")
} else {
   print("My string does not have a value")
}

输出:

The value of my string is - Hello world

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程