SwiftUI: неожиданное состояние платформы для многоплатформенного приложения swiftui

Я пытаюсь реализовать список в мультиплатформенной реализации, вот моя реализация:

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 ответ

Решение

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 условный.

Другие вопросы по тегам