Swift 示例问题
Swift issue with example
我是 swift 的新手,现在正在学习这本名为 Swift 编程语言 的书。书中有一个例子:
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}
这是我不明白的部分:
if let convertRank = Rank(rawValue: 3){
let description = convertRank.simpleDescription()
}
我尝试将上面的代码更改为:
let convertRank = Rank(rawValue: 3)
let description = convertRank.simpleDescription()
基本上,我刚刚删除了 if
语句,但随后发生错误:Value of optional 'Rank?' not unwrapped;你是不是想用'!'或 '?'?
为什么我必须使用 if
语句?而且我真的不明白错误消息说的是什么。
因为它是可选的,您必须在使用前解包。您可以阅读有关 Optionals here.
let description = convertRank?.simpleDescription()
可以。
if let
是 Swift 中的一个特殊 structure
,它允许您检查 Optional 是否包含一个值,如果它包含 - 对未包装的值做一些事情。
你的情况:
if let convertRank = Rank(rawValue: 3){
let description = convertRank.simpleDescription()
}
if let
结构解包 Rank(rawValue: 3)
(即检查是否存储了一个值并获取该值)并将其值存储在 convertRank
常量中。您可以在 if
的第一个分支内使用 convertRank
。
请注意,在 if
中,您不再需要使用 ?
或 !
。
第二种情况:
let convertRank = Rank(rawValue: 3)
let description = convertRank.simpleDescription()
您可以这样解包 convertRank
:
let description = convertRank!.simpleDescription()
Trying to use !
to access a non-existent optional value triggers a
runtime error. Always make sure that an optional contains a non-nil
value before using !
to force-unwrap its value.
但下面的代码将与 if let
:
相同
let description = convertRank?.simpleDescription()
如果 convertRank
为 nil
,程序将不会崩溃。
更多说明:
- What is an optional value in Swift?
- What does an exclamation mark mean in the Swift language?
我是 swift 的新手,现在正在学习这本名为 Swift 编程语言 的书。书中有一个例子:
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}
这是我不明白的部分:
if let convertRank = Rank(rawValue: 3){
let description = convertRank.simpleDescription()
}
我尝试将上面的代码更改为:
let convertRank = Rank(rawValue: 3)
let description = convertRank.simpleDescription()
基本上,我刚刚删除了 if
语句,但随后发生错误:Value of optional 'Rank?' not unwrapped;你是不是想用'!'或 '?'?
为什么我必须使用 if
语句?而且我真的不明白错误消息说的是什么。
因为它是可选的,您必须在使用前解包。您可以阅读有关 Optionals here.
let description = convertRank?.simpleDescription()
可以。
if let
是 Swift 中的一个特殊 structure
,它允许您检查 Optional 是否包含一个值,如果它包含 - 对未包装的值做一些事情。
你的情况:
if let convertRank = Rank(rawValue: 3){
let description = convertRank.simpleDescription()
}
if let
结构解包 Rank(rawValue: 3)
(即检查是否存储了一个值并获取该值)并将其值存储在 convertRank
常量中。您可以在 if
的第一个分支内使用 convertRank
。
请注意,在 if
中,您不再需要使用 ?
或 !
。
第二种情况:
let convertRank = Rank(rawValue: 3)
let description = convertRank.simpleDescription()
您可以这样解包 convertRank
:
let description = convertRank!.simpleDescription()
Trying to use
!
to access a non-existent optional value triggers a runtime error. Always make sure that an optional contains a non-nil value before using!
to force-unwrap its value.
但下面的代码将与 if let
:
let description = convertRank?.simpleDescription()
如果 convertRank
为 nil
,程序将不会崩溃。
更多说明:
- What is an optional value in Swift?
- What does an exclamation mark mean in the Swift language?