Uwrapping optionals - Swift 1.2 Xcode 6.4

Uwrapping optionals - Swift 1.2 Xcode 6.4

我仍然遇到可选值的问题,Apple 提供的示例对我来说不是很清楚。我的理解是:

提前致谢

var santa : String?

println(santa)



if let santaExists = santa {
    println("Santa exists! Santa is:  \(santa)")
}
else {
    println("Santa is missing! Santa is: \(santa) or not set") //Santa is missing! Santa is: nil or not set
}

santa = "I am here!"

if let santaExists = santa {
    println("Santa exists! Santa is:  \(santa)") //Santa exists! Santa is:  Optional("I am here!)
}
else {
    println("Santa is missing! Santa is: \(santa) or not set")
}

编辑:解决方案

var santa : String?

println(santa)



if let santaExists = santa {
    println("Santa exists! Santa is:  \(santa)")
}
else {
    println("Santa is missing! Santa is: \(santa) or not set") //Santa is missing! Santa is: nil or not set
}

santa = "I am here!"

//first way to unwrap, with a " ! "
if let santaExists = santa {
    println("Santa exists! Santa is:  \(santa!)") //Santa exists! Santa is:  I am here! (santa unwrapped)
}
else {
    println("Santa is missing! Santa is: \(santa) or not set")
}

//second way to unwrap don't use santa, but the new constant
if let santaExists = santa {
    println("Santa exists! Santa is:  \(santaExists)") //Santa exists! Santa is:  I am here! (santa unwrapped by let)
}
else {
    println("Santa is missing! Santa is: \(santa) or not set")
}

首先,在创建变量时,例如圣诞老人,请将第一个字母小写,即圣诞老人

要在第二个 if 语句中使用展开的圣诞老人,请添加感叹号,这会告诉编译器您知道此变量不是 nil。

println("Santa exists! Santa is:  \(Santa!)")

您也可以使用下面的代码,因为您已将变量 Santa 的内容设置为 SantaExist 作为常量

if let SantaExist = Santa {
    println("Santa exists! Santa is:  \(SantaExist)") //Santa exists! Santa is:  Optional("I am here!)
}
else {
    println("Santa is missing! Santa is: \(Santa) or not set")
}

至于可选链接,这只是用一个问号代替感叹号,这样如果它为 nil,它将 "fail gracefully" 而不是使应用程序崩溃。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID246