13

在名为“组合复杂接口”的 SwiftUI 的 Apple 教程中,该教程使用了一个看起来不是字符串插值或转义字符的反斜杠。这是行:

ForEach(categories.keys.sorted().identified(by: \.self))

这个反斜杠的目的是什么?

下面是包含它的整个结构。

struct CategoryHome: View {
    var categories: [String: [Landmark]] {
        .init(
            grouping: landmarkData,
            by: { $0.category.rawValue }
        )
    }

    var body: some View {
        NavigationView {
            List {
                ForEach(categories.keys.sorted().identified(by: \.self)) { key in
                    Text(key)
                }
            }
            .navigationBarTitle(Text("Featured"))
        }
    }
}
4

2 回答 2

13

SwiftUI中,blackslash 运算符用于引用 keypath 以在给定块内使用。

来自苹果:

添加引用身份密钥路径的功能,该路径指的是应用它的整个输入值。

因此,例如,请参阅以下代码:

ForEach(["iPhone SE", "iPhone XS Max"].identified(by: \.self)) { deviceName in
        LandmarkList()
            .previewDevice(PreviewDevice(rawValue: deviceName))
}

在这里迭代数组时,使用 self(here - string) 作为键

现在再举一个例子:我们使用对象数组(不是字符串),现在在这种情况下,用作迭代块内的键的键是 id。

List(landmarkData.identified(by: \.id)) { landmark in
        LandmarkRow(landmark: landmark)
}
于 2019-06-07T08:12:41.287 回答
6

\.self这是苹果添加的身份密钥路径:

添加引用身份密钥路径的功能,该路径指的是应用它的整个输入值。

提案中的更多信息。

于 2019-06-07T07:34:37.927 回答