#ios #swift #macos #swiftui-list #xcode12beta6
#iOS #swift #macos #swiftui-список #xcode12beta6
Вопрос:
Я пытаюсь реализовать список в многоплатформенной реализации, вот моя реализация:
struct ContentView: View {
var body: some View {
List {
Section(header: Text("Header"), footer: Text("Footer")){
ForEach(0..<5){
Text("($0)")
.tag($0)
}
}
#if os(iOS)
.listStyle(GroupedListStyle())
#endif
}
}
}
Но в этой строке:
.listStyle(GroupedListStyle())
Я получаю эту ошибку:
Unexpected platform condition (expected `os`, `arch`, or `swift`)
Кто-нибудь из вас знает способ обойти эту ошибку?
Я буду очень признателен за вашу помощь
Комментарии:
1. @Paulw11, исправьте, это причина, по которой я добавляю
#if os(iOS)
. Нужно ли добавлять альтернативу?
Ответ №1:
SwiftUI не очень любит код условной компиляции.
Попробуйте что-то вроде этого:
#if os(macOS)
typealias MyListStyle = PlainListStyle
#else
typealias MyListStyle = GroupedListStyle
#endif
...
SomeView {}
.listStyle(MyListStyle())
Или
func myListStyle() -> some View {
#if os(macOS)
return listStyle(PlainListStyle())
#else
return listStyle(GroupedListStyle())
#endif
}
...
SomeView {}
.myListStyle()
Вы также можете использовать вариант func
с возвращаемым self
для модификаторов, которые не подходят. Я также использовал его для создания .environment
условий.
Комментарии:
1. Я реализовал ваше решение, но я получаю и ошибку в этой строке
Section(header
, ошибка:Instance method "listStyle" requieres that some view conform to ListStyle
2. Вы можете применить только
.listStyle
кList
форме или, возможно, к форме или стеку. Вероятно, это не работает наSection
. Это то, что говорит вам компилятор. SwiftUI часто выдает загадочные сообщения об ошибках, но это очень простое и конкретное.