Вы можете найти некоторое преимущество, используя ViewModifiers, см. https://sarunw.com/posts/swiftui-viewmodifier/
Модификатор представления позволит вам легко просто передать переменную editMode в один модификатор, который изменяет ваш вид строки в список с тем, что вы настраиваете в качестве параметров в модификаторе представления.
Пример:
struct SomeView: View {
@Environment(\.editMode) var editMode
let options = ["1", "2", "3"]
var body: some View {
List {
ForEach(options, id: \.self) { option in
RowView(string: option)
.modifier(CustomModifier(self.editMode))
}
}//.environment(\.editMode, $editMode)
.navigationBarItems(trailing: EditButton())
}
struct CustomModifier: ViewModifier {
init(_ editMode: Binding<EditMode>?) {
self.editing = editMode?.wrappedValue.isEditing ?? false
}
var editing: Bool
func body(content: Content) -> some View {
return content
.foregroundColor(editing ? .red : .green)
.onTapGesture {
print("I'm a \(self.editing ? "red" : "green") thing")
}
}
}
}
struct RowView: Просмотр {let string: String
var body: some View {
Text(string)
}
}
Что касается изменения значков удаления и перемещения, я не знаком с этим. Я не смог с готовностью найти решение, погуглившее это, либо извините.