Я разрабатываю простое приложение SwiftUI в Xcode 11. Я хочу иметь форму, которая проходит через несколько строк ввода пользователя и отображает форму с помощью кнопки. Когда пользователь нажимает кнопку, он изменяет входное значение - в частности, увеличивает или уменьшает его.
Однако при передаче массива ссылок, таких как UserInput().foo
, где UserInput является опубликованным наблюдаемым объектом, я не могу изменить значение внутри ForEach, потому что ForEach передается копия, а не исходная ссылка (по крайней мере, это мое базовое понимание). Как мне тогда попытаться достичь этого? Я читал о inout
, и все говорят, что этого следует избегать, но, безусловно, это должна быть относительно распространенная проблема.
Я привел простой пример того, что пытаюсь сделать, но не могу с этим справиться:
import SwiftUI
class UserInput: ObservableObject {
@Published var foo: String = ""
@Published var bar: String = ""
}
struct ContentView: View {
@ObservedObject var input = UserInput()
var body: some View {
LoopInputs()
}
func LoopInputs() -> AnyView?{
var userinputs = [
[UserInput().foo, "Foo"],
[UserInput().bar, "Bar"]
]
var inputs: some View{
VStack(){
ForEach(userinputs, id: \.self){userinput in
Text("\(userinput[1]): \(String(userinput[0]))")
Button(action: {
increment(input: String(userinput[0]))
}){
Text("Increase")
}
}
}
}
return AnyView(inputs)
}
func increment(input: String){
var lead = Int(input) ?? 0
lead += 1
// input = String(lead)
}
}
var input
. Не могли бы вы рассказать подробнее? - person Asperi   schedule 04.07.2020