Uwrapping optionals - Swift 1.2 Xcode 6.4

时间:2015-07-31 10:05:05

标签: ios xcode swift optional optional-variables

我仍然遇到选项问题,Apple的例子对我来说并不清楚。我明白了:

  • 1 - 可选是一种数据,所以Int?或字符串?是选项,而不是Int或String
  • 2 - optional可以是变量,而不是常量,只要是可选的,可以是nil,或其他
  • 3 - 为了使用它们,你需要打开它们
  • 4 - 您可以使用可选链接来执行检查(如何确定解包或链接?)

    • A)如何在第二次打开圣诞老人?
    • B)打开后如何,我可以 在其他函数中使用变量?
    • C)怎么可能面对同样的事情 可选链接的例子?

提前致谢

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")
}

1 个答案:

答案 0 :(得分:1)

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

要在第二个if语句中使用unwrapped santa,添加一个感叹号,这告诉编译器你知道这个变量不是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,它将“优雅地失败”而不是使应用程序崩溃。

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