#swiftui
#swiftui
Вопрос:
Я пытаюсь использовать одно и то же представление как для iOS, так и для macOS, изменяя только .ListStyle(), поскольку InsetGroupedListStyle() недоступен в macOS.
@ViewBuilder
var body: some View {
if subject.tasks.count == 0 {
VStack {
Text("app.main.smartList.noTasks")
Image(systemName: "tray.fill").font(.system(size: 90)).padding(40)
}.navigationTitle("Empty")
} else {
List(subject.tasks, id: .id) { task in
TaskView(task: task).environmentObject(self.controller)
}
.listStyle(controller.currentOS == OS.iOS ? InsetGroupedListStyle() : DefaultListStyle())
.navigationTitle(subject.name)
}
}
Но я продолжаю получать эту ошибку.
Результирующие значения в ‘? :’ espressione имеют несовпадающие типы ‘InsetGroupedListStyle’ и ‘DefaultListStyle’
Разве они не являются обоими стилями списка?
Ответ №1:
Это оба стиля списка, но разных конкретных типов, поэтому swift type checker не допускает такого, вместо этого мы можем использовать пользовательский модификатор, например
extension List {
@ViewBuilder
func insetListStyle(if flag: Bool) -> some View {
if flag {
self.listStyle(InsetGroupedListStyle())
} else {
self // implicit DefaultListStyle
}
}
}
и теперь используйте его как
List(subject.tasks, id: .id) { task in
TaskView(task: task).environmentObject(self.controller)
}
.insetListStyle(if: controller.currentOS == OS.iOS)