SwiftUI中的firstIndex是什么-Swift

时间:2019-06-21 00:12:13

标签: swift indexing swiftui

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

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

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

通过写“ $ 0.id == landmark.id”,我无法理解什么是firstIndex和正在访问的内容 我为什么要创建这个变量?

非常感谢您- 尼科

Apple tutorial about SwiftUI

1 个答案:

答案 0 :(得分:0)

如果要冗长地写这篇文章,它将看起来像这样:

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。