SwiftUI中是否有didSet的替代方法?

问题描述 投票:0回答:1

我想在获得User()之后立即更改名称。 DidSet在这里不起作用。 SwiftUI中的didSet是否有替代方法?

struct Person: Identifiable {
let id = UUID()
var name: String
var number: Int
}

class User: ObservableObject {
@Published var array = [Person(name: "Nick", number: 3),
                        Person(name: "John", number: 2)
]
}

struct ContentView: View {

@ObservedObject var user = User() {
    didSet {
        user.array[0].name = "LoL"
    }
}

var body: some View {
    VStack {
        ForEach (user.array) { row in
            Text(row.name)
        }
    }
}
}
ios swift swiftui
1个回答
0
投票

如果我正确理解了您的期望(拥有您的代码),则有两个选择可以实现目标:

选项1:在init中设置创建的用户(作为在init之前创建的属性)

init() {
    self.user.array[0].name = "LoL"
}

选项2:在视图外观上进行设置

VStack {
    ForEach (user.array) { row in
        Text(row.name)
    }
}
.onAppear {
    self.user.array[0].name = "LoL"
}
© www.soinside.com 2019 - 2024. All rights reserved.