Swift中的Optionals!

我第一次使用Optionals时,这对我来说很难理解。 作为一个新程序员,我不知道如何正确使用它或何时使用它。 但是,在进一步使用之后,我开始欣赏Swift团队在创建Optionals中所做的工作。

Optional是一个值包装器,您可以将其应用于任何类型(与在目标类中使用nil和指针Objective-C只能在类上使用的情况不同),在其中声明值的存在或不存在。 通过使用Optional声明您的类型,如果您的类型有可能不返回任何值,则仅返回nil。 如果我们没有在类型上使用Optional,并且返回值为nil,它将导致您的应用程序崩溃。 可选的只是一个枚举,带有2个案例的状态为.Some或.None。

我喜欢将“可选”视为一个神秘盒子,而您的返回值就是其中的礼物。 除非打开它,否则您将永远不知道会得到什么。 此框包含有价值的东西或什么都不包含。

声明可选

  var fire:字符串? 

为了简单地声明一个Optional,我们要做的就是在我们的类型后面放一个(?)。

解包可选

通过在我们的类型上声明Optional,返回值也将是可选的。

  var fire:字符串? 
火=🔥
打印(火)
// Optional(“🔥”)/ n

为了利用Optional内部的值,我们可以采用几种方法来对其进行拆包。

可选装订

 如果让realFire == fire { 
print(“ Fire值是\(realFire)”)
}
其他{
打印(“这里什么也没有”)
}

在这里,我使用if-let语句来解开我的Optional。 我在这里要说明的是,如果有一个值,则打印“ realFire”的值。 “ realFire”只是fire中的值的占位符名称,您可以随意命名。

 守卫让realFire =火 
其他{不打印“}
print(“ Fire值是\(realFire)”)

在这里,我使用了一个让卫的语句来解开我的Optional。 两者之间的区别在于,我们首先声明else语句。 guard-let语句的优点是与函数结合使用,如果没有值,我们可以轻松地中止该函数。 我们的价值也存在于代码块之外。 与if-let语句不同,我们的值仅存在于代码块内部。 if-let语句的主要问题是厄运金字塔。 厄运金字塔是当我们要访问多个Optionals内部的值时。 为了获得该值,我们将必须使用多个if-let语句进入所需的层。 使用Guard-let语句将使您免于键入那么多行代码,并使代码更具可读性。

强制展开

 让水:绳子?  =“💧” 
 让realWater =水! 

要强制展开Optional,只需在变量后加上(!)。 我们用力解包表示必须有一个值并且不需要检查是否有零可能性。 使用强制展开的缺点是,如果该值具有nil属性,则我们的应用程序将崩溃或导致编译器错误。

隐式展开

var water: String! =  var water: String! = “💧” 
 让realWater =水 

在这里,我们从一开始就说明每次都要强制打开可选项。 我也要谨慎使用它,因为您再次说有100%的机会存在价值。

希望这对大家有帮助。 感谢收看! 😁