Uwrapping optionals - Swift 1.2 Xcode 6.4
Uwrapping optionals - Swift 1.2 Xcode 6.4
我仍然遇到可选值的问题,Apple 提供的示例对我来说不是很清楚。我的理解是:
- 1 - optional 是一种数据类型,所以 Int?或字符串?是可选项,不是 Int 或 String
- 2 - optional 可以是一个变量,而不是一个常量,就可选而言,可以是 nil 或其他东西
- 3 - 为了使用它们,你需要打开它们
4 - 您可以使用可选链接来执行检查(如何决定是展开还是链接?)
- A) 如何在第二个 if 中展开圣诞老人?
- 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")
}
首先,在创建变量时,例如圣诞老人,请将第一个字母小写,即圣诞老人
要在第二个 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" 而不是使应用程序崩溃。
我仍然遇到可选值的问题,Apple 提供的示例对我来说不是很清楚。我的理解是:
- 1 - optional 是一种数据类型,所以 Int?或字符串?是可选项,不是 Int 或 String
- 2 - optional 可以是一个变量,而不是一个常量,就可选而言,可以是 nil 或其他东西
- 3 - 为了使用它们,你需要打开它们
4 - 您可以使用可选链接来执行检查(如何决定是展开还是链接?)
- A) 如何在第二个 if 中展开圣诞老人?
- 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")
}
首先,在创建变量时,例如圣诞老人,请将第一个字母小写,即圣诞老人
要在第二个 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" 而不是使应用程序崩溃。