Для чего используется обратный слеш (\) в SwiftUI? - PullRequest
3 голосов
/ 07 июня 2019

В руководстве Apple по SwiftUI под названием «Составление сложных интерфейсов» в руководстве используется обратная косая черта, которая не является интерполяцией строк или escape-символом.Это строка:

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"))
        }
    }
}

Ответы [ 2 ]

6 голосов
/ 07 июня 2019

В SwiftUI оператор blackslash используется для указания пути к клавише для использования внутри данного блока.

от яблока:

Добавить возможность ссылаться на путь ключа идентификации, который относится ко всему входному значению, к которому он применяется.

Так, например, посмотрите этот код:

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

здесь при итерации по массиву используйте self (здесь - string) в качестве ключа

Теперь возьмем другой пример: где мы используем массив объектов (не строку), теперь в этом случае ключ, который используется в качестве ключа внутри блока для итерации, это id.

List(landmarkData.identified(by: \.id)) { landmark in
        LandmarkRow(landmark: landmark)
}
2 голосов
/ 07 июня 2019

\.self это путь идентификации ключа, для которого добавлено яблоко:

Добавить возможность ссылаться на путь ключа идентификации, который относится ко всему входному значению, к которому он применяется.

Подробнее в предложении .

...