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

时间:2019-11-24 07:07:26

标签: ios swift swiftui

我想在获得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)
        }
    }
}
}

1 个答案:

答案 0 :(得分: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"
}