gpt4 book ai didi

示例的 Swift 问题

转载 作者:搜寻专家 更新时间:2023-11-01 07:31:29 25 4
gpt4 key购买 nike

我是 swift 的新手,现在正在学习这本名为The Swift Programming Language 的书。书中有一个例子:

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?'未展开;你是不是想用'!'还是“?”?

为什么我必须使用 if 语句?而且我真的不明白错误消息说的是什么。

最佳答案

if let 是 Swift 中的一个特殊的结构,它允许您检查一个 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()

如果 convertRanknil,程序将不会崩溃。


更多说明:

关于示例的 Swift 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com