Swift Wrap和Unwrap

use*_*399 1 xcode swift

我对Swift Wrap和Unwrap有点困惑!所以我们说这是我的代码:

var name:String? = "FirstName"
print(name)
Run Code Online (Sandbox Code Playgroud)

打印功能是否自动解包可选的名称?所以我不需要说 print(name!)以打开这个名字?我想我想要了解的是这两个是否相当于解开一个可选变量?

print("name") 就像说 print ("name"!)

我的另一个问题是关于零.说的var name:String? = "FirstName"相当于说var name:String? = nil.那么赋值是否包含变量?

Fre*_*ust 8

什么东西可以是零,它可以是两件事,它可以是Some(给定类型的值)或者它可以是nil.

宣布这样的事情:

var name: String?
Run Code Online (Sandbox Code Playgroud)

意味着name变量可以为nil,如果为其赋值,则需要将其展开以使用它.

name = "FirstName"
Run Code Online (Sandbox Code Playgroud)

现在已经定义了name变量,但是在某些情况下你还需要确保它不是nil,但在其他情况下(例如当字符串不需要为nil时)使用可选的链接.

可选链接允许在整个陈述中连续评估零或一些,只要不要求不是零.如果是这种情况,那么您需要打开它:

let someThingRequiresAString = NeedAStringInitializer(string: name!)
Run Code Online (Sandbox Code Playgroud)

在上面的语句中,如果name为nil,程序将崩溃,有几种方法可以处理这样的事情,这是一个简单的例子:

if name != nil {

let someThingRequiresAString = NeedAStringInitializers(string: name!)
}
Run Code Online (Sandbox Code Playgroud)

在这里你知道你可以这样做b/c名称已被评估为不是零.您还可以使用零合并运算符或保护语句.这是Swift中nil合并的一个简单例子:

let someThingRequiresAString = NeedAStringInit(string: name ?? "New Name")
Run Code Online (Sandbox Code Playgroud)

可选范式非常强大且富有表现力.