首页 > 解决方案 > SwiftUI 中的 firstIndex 是什么 - Swift

问题描述

在关注有关 SwiftUI 的 Apple 教程时,我发现了这一点:

1| var landmarkIndex: Int {
2|    userData.landmarks.firstIndex(where: { $0.id == landmark.id })!
3| }

教程中的第 2 行没有很好地解释,他们只说:“在访问或更新地标的收藏状态时,您将使用 landmarkIndex,以便您始终访问该数据的正确版本。”

我无法理解什么是 firstIndex 以及我通过编写“$0.id == landmark.id”访问的内容 为什么我要创建这个 var?

非常感谢 - 尼科

苹果关于 SwiftUI 的教程

标签: swiftindexingswiftui

解决方案


如果你要详细地写这个,它看起来像这样:

var landmarks: [LandMark] = []
for l in userData.landmarks {
  if isLandMarkEqual(l, landmark) {
    landmarks.append(l)
  }
}

func isLandMarkEqual(_ landmarkOne: LandMark, _ landmarkTwo: LandMark) -> Bool {
  return landmarkOne.id == landmarkTwo.id
}

我们正在遍历 userData.landmarks 并在每个元素上调用一个函数(由 {} 表示)。然后,我们获得满足函数中规定的条件(也称为闭包)的元素第一次出现的索引。

如果我们只是简单地返回 true 例如

userData.landmarks.firstIndex(where: { true })!

那么每个元素的条件都为真,因此我们只会得到集合中的第一个索引,也就是 0。

$0 只是函数/闭包中第一个参数的简写。在我们的示例中,这等效于 landmarkOne。


推荐阅读