gpt4 book ai didi

swift - Array of String printing 可选,为什么?

转载 作者:可可西里 更新时间:2023-11-01 00:37:08 24 4
gpt4 key购买 nike

我在 Playground 上玩数组,我有点困惑。这是代码:

var players = ["tob", "cindy", "mindy"] //["tob", "cindy", "mindy"]
print(players.isEmpty) // False
var currentPlayer = players.first // "tob"
print(currentPlayer) // "Optional("tob")\n"

为什么说“可选”?我找到了解释:“first 属性实际上返回一个可选值,因为如果数组为空,first 将返回 nil。”

但它不是空的。 .isEmpty//false,所以我不明白这一点。

提前感谢您的帮助。

最佳答案

正确的思考方式Optional是这可能有也可能没有值(value)。空列表的第一个元素是什么?哪有这回事。它不是一个值。我们称之为缺少值(value) nil.None .

在 Swift 中,变量必须有特定的类型。所以你的例子:

let currentPlayer = players.first

currentPlayer 的类型是什么? ?它可能是 String ,或者它可能什么都不是。它是一个“可能的字符串”,在 Swift 中称为 Optional<String> .是否players有元素或没有元素不会改变 currentPlayer 的类型.

如果当且仅当变量有值时你想做某事,那么有很多方法。最简单的是if-let .

let players = ["tob", "cindy", "mindy"] //["tob", "cindy", "mindy"]
print(players.isEmpty) // False
if let currentPlayer = players.first {
print(currentPlayer)
}

这将打印 tob如您所料。

另一种非常常见的方法是 guard let

let players = ["tob", "cindy", "mindy"] //["tob", "cindy", "mindy"]
guard let currentPlayer = players.first else { return }
print(currentPlayer)

这可以让您避免将函数的其余部分嵌套在花括号内,但其他方法相同。

可以使用 ! 将 Optional 转换为其基础类型, 但这是非常危险的,除非绝对必要,否则应该避免。 if-let 等工具和 guard-let (还有 Optional.map )几乎总是首选。

但这里的关键是要了解所有 Swift 变量都有单一类型,有时该类型是“可能有值,也可能没有。”

关于swift - Array of String printing 可选,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847330/

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