【问题标题】:is there an alternative for didSet in SwiftUI?SwiftUI 中的 didSet 有替代方案吗?
【发布时间】:2019-11-24 07:07:26
【问题描述】:

我想在获得 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】:

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

选项 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"
}

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2021-12-03
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多