Swift中的可选项

缺乏资料

在某些情况下,我们希望接受用户的数据,同时也希望某些数据是可选的,这意味着它们不是必需的,但应在可能的情况下提供。

一个人的常量me实例提供了所有数据,但另一个人常量不提供所有数据,因为他可能没有中间名。 因此,他将nil作为middlename的值。 听起来不错,但是传递的nil会导致错误,为什么?,因为我们没有告诉swift将Middlename设为optional

Swift中的Optional是什么?

Swift中的可选类型是可以保存值或不保存值的类型。 可选项通过附加?来编写? 任何类型:

  var middlename:字符串? 

上面的意思是Middlename可以是字符串,也可以不包含任何由?表示的内容?可选容器是一种容器。 可选的String是一个可能包含字符串的容器。 一个可选的Int是一个可能包含Int的容器 。 将可选件视为一种包裹。 在您打开它(或用可选语言“解开”)之前,您将不会知道它是否包含某些东西或什么都不包含。 它只是可以设置为nilOptional值,这就是当我们向middlename传递nil值而未指定Optional类型时发生错误的原因。

 var red: String = "Red" 
 red = nil // error: nil cannot be assigned to type 'String' 

如何创建一个可选的?

快速创建optional的最简单方法是添加? 在下面的类型前面

  var middlename:字符串? 

另一种方法是使用如下所示的Optional关键字

  var middlename : Optional 

使用(解包)可选

解开可选项的最简单方法是添加! 在可选名称之后。

注意\(middlename!) 可以用来解开中间名,因此我们可以获取值“ abel”。 问题在于,当我们将nil值传递给中间名时,我们会遇到运行时崩溃的消息,提示nil is Unexpected

在展开之前,我们需要确保有一个值。 因此,在使用(展开)可选选项之前,我们将继续如何检查内容。

在强制展开之前,使用If检查是否为零:

由于在初始化Person结构时传递给变量的是nil ,因此我们可以使用if语句在展开Person结构之前检查nil ,如下所示

每当我们使用! 符号,它表示为强制展开可选值,但这是避免强制展开可选值的一种常见做法,因为我们可以以这样的方式编写代码:swift会自动为我们解包

使用可选绑定:

通过可选绑定,尽管我们仍在使用if,但是swift为我们提供了一种使用if let语句的方式,然后为我们自动将其解包,如下所示

使用Guard提前退出:

Guard提供了一种在检查optional字符串时快速退出并使我们的代码更整洁的方法,因此将不需要if else语句。

我们已经介绍了如何快速使用可选选项,让我们看一些可选的很酷的辅助用例,包括使用multiply optionalsmethod chainingNil Coalescing

Street类中的streetName是一个可选字符串, House类具有一个street变量,它也是一个可选Street。 Person类也有一个变量房屋,这是一个可选房屋。 当我们必须进入人街时。 要访问此人的街道(myStreet),我们不确定该人是否向我们提供了房屋信息(myHouse)。 这就是为什么我们使用if let myHouse = Person.house 。 如果Person.house为空,则if语句将无法执行,否则该变量将分配给myHouse属性。 接下来,我们必须访问myHouse.street ,如果可用,该变量将分配给myStreet

可以通过使用如下所示的可选链接来改进用于访问myStreet的模式:

很高兴与您分享这篇文章。 如果您喜欢本文,请通过鼓掌👏 表示支持 感谢您的时间,请确保关注我或在comment下方发表您的评论