Swift Wrap和Unwrap

时间:2016-01-26 02:09:48

标签: xcode swift

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

var name:String? = "FirstName"
print(name)

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

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

一样

我的另一个问题是关于零。 说var name:String? = "FirstName"相当于说var name:String? = nil。那么指定一个nil值包装一个变量吗?

1 个答案:

答案 0 :(得分:8)

当某些东西可以是零时,它可以是两件事,它可以是Some(给定类型的值)或者它可以是nil。

宣布这样的事情:

var name: String?

表示name变量可以为nil,如果为其赋值,则需要将其解包以使用它。

name = "FirstName"

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

可选链接允许在整个语句中连续评估nil或某些语句,只要它不需要不是nil即可。如果是这种情况,那么你需要打开它:

let someThingRequiresAString = NeedAStringInitializer(string: name!)

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

if name != nil {

let someThingRequiresAString = NeedAStringInitializers(string: name!)
}

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

let someThingRequiresAString = NeedAStringInit(string: name ?? "New Name")

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