在阅读The Swift Programming Language时,我遇到了这个片段:
您可以使用如果和让一起使用可能的值 失踪。这些值表示为选项。可选值 要么包含值,要么包含nil以指示该值 失踪。在要标记的值的类型后面写一个问号(?) 该值为可选。
// Snippet #1
var optionalString: String? = "Hello"
optionalString == nil
// Snippet #2
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Snippet#1足够清晰,但是在Snippet#2中发生了什么?有人可以分解并解释吗?它只是使用if - else
块的替代方法吗? let
在这种情况下的确切作用是什么?
我确实阅读了this页面,但仍然有点困惑。
答案 0 :(得分:7)
if let name = optionalName {
greeting = "Hello, \(name)"
}
这有两件事:
检查optionalName
是否有值
如果确实如此,它会解开"该值并将其分配给名为name
的String(仅在条件块内部可用)。
请注意,name
的类型为String
(不是String?
)。
如果没有let
(即只有if optionalName
),只有存在值时它才会进入块,但您必须手动/显式访问String { {1}}。
答案 1 :(得分:4)
// this line declares the variable optionalName which as a String optional which can contain either nil or a string.
//We have it store a string here
var optionalName: String? = "John Appleseed"
//this sets a variable greeting to hello. It is implicity a String. It is not an optional so it can never be nil
var greeting = "Hello!"
//now lets split this into two lines to make it easier. the first just copies optionalName into name. name is now a String optional as well.
let name = optionalName
//now this line checks if name is nil or has a value. if it has a value it executes the if block.
//You can only do this check on optionals. If you try using greeting in an if condition you will get an error
if name{
greeting = "Hello, \(name)"
}
答案 2 :(得分:3)
String?
是一个盒装类型,变量optionalName
包含String
值或不包含任何内容(即nil
)。
if let name = optionalName
是一个习惯用法,它会将optionalName
中的值取消装箱并将其分配给name
。同时,如果名称为非nil,则执行if
分支,否则执行else
分支。