-2

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

  • 1 - optional 是一种数据类型,所以 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")
}
4

1 回答 1

1

首先,在创建变量例如 Santa 时,请将第一个字母小写,即 santa。

要在第二个 if 语句中使用未包装的 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

于 2015-07-31T10:13:02.133 回答