使用let和if一起 - Swift导游游乐场

时间:2014-07-18 17:18:47

标签: swift conditional-statements optional

我目前正在浏览可以在苹果网站上找到的Swift导览游乐场。我对C和C#有一些了解,但我每天都在使用javascript。

我偶然发现了操场上的这些线条:

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
   greeting = "Hello, \(name)"
}

在这种情况下,"问候"变量将是"你好,John Appleseed"或者只是"你好!"如果我要将optionalName设置为nil。

文档说明:

  

您可以使用if和let一起处理可能缺失的值。这些值表示为选项。可选值包含值或包含nil以指示缺少值。在值的类型后面写一个问号(?),将值标记为可选。

我想知道的是,这与我通常的做事方式有何不同:

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if optionalName {
   greeting = "Hello, \(optionalName)"
}

因为操场上的结果实际上是相同的,所以我想了解区别是什么,以及为什么我应该使用另一个。

谢谢!

1 个答案:

答案 0 :(得分:1)

nameStringoptionalNameString?

字符串格式化并不重要,因为该示例将接受任何类型。

但是,在类型很重要的情况下,您的第二个示例将失败。

例如,这不起作用:

var optionalName: String? = "John Appleseed"
var names :[String] = []

if optionalName {
    names += name
}

(您无法将String?添加到String的数组中。)

您可以使用if let语法替换它:

if let name = optionalName {
    names += name
}

或者你可以用unwrap操作符替换它:

if optionalName {
    names += optionalName!
}

在您的原始示例中,如果您想避免使用if let,则更正确的用法是添加解包运算符:

if optionalName {
   greeting = "Hello, \(optionalName!)"
}