Новый оператор SwiftUI
ForEach
возвращает View
для каждого Element
из Array
. Для вашего кода вам просто нужно запустить Void
, Array<Exercise>.append(newElement: Exercise)
, а не получить несколько View
, поэтому вы можете использовать for
l oop, map
или Array.forEach(body: (_) throws -> Void)
.
Если порядок, в котором добавляются newExercises
, имеет значение, наиболее элегантным решением будет сопоставление каждого NewExercise
из finalExercises
с Exercise
и добавление результирующего Array<Exercise>
с Array<Exercise>.append(contentsOf: Sequence)
.
struct SomeView: View {
@State var newExercises = [NewExercise]()
@State var finalExercises = [Exercise]()
var body: some View {
Button(action: {
self.finalExercises.append(contentsOf:
self.newExercises.map { newExercise -> Exercise in
newExercise.getExercise()
}
)
}) {
Text("Done")
}
}
}
Если порядок добавления newExercises
не имеет значения, вы можете позвонить Array<Exercise>.append(newElement: Exercise)
из newExcercises.forEach
, что отличается от оператора SwiftUI
ForEach
:
struct SomeView: View {
@State var newExercises = [NewExercise]()
@State var finalExercises = [Exercise]()
var body: some View {
Button(action: {
self.newExercises.forEach { newExercise in
self.finalExercises.append(newExercise.getExercise())
}
}) {
Text("Done")
}
}
}
Способ завершить то, что вы хотите с помощью для l oop, будет простым, но менее элегантным:
struct SomeView: View {
@State var newExercises = [NewExercise]()
@State var finalExercises = [Exercise]()
var body: some View {
Button(action: {
for newExercise in self.newExercises {
self.finalExercises.append(newExercise.getExercise())
}
}) {
Text("Done")
}
}
}