我目前正在浏览可以在苹果网站上找到的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)"
}
因为操场上的结果实际上是相同的,所以我想了解区别是什么,以及为什么我应该使用另一个。
谢谢!
答案 0 :(得分:1)
name
是String
但optionalName
是String?
。
字符串格式化并不重要,因为该示例将接受任何类型。
但是,在类型很重要的情况下,您的第二个示例将失败。
例如,这不起作用:
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!)"
}