在 swiftUI 中初始化详细视图

initializing detail view in swiftUI

我正在编写一个待办事项列表应用程序,但在初始化详细信息视图时遇到了问题。 在 HomeView 中,我使用 foreach 来设置每一行。

struct HomeListView: View {
    ForEach(items) { item in
        NavigationLink(destination: ItemDetailView(item: item, editMode: true)) {
        ItemView(title: item.title, text: item.text, type: item.type, dueDate: item.dueDate)
    }
}

在 ItemDetailView 中,我定义了一个 init() 来设置标题、文本和其他属性。

struct ItemDetailView: View {
    @State var title: String = ""
    @State var text: String = ""
    @State var type: Int = 0
    @State var dueDate: Date = Date()

    init(item: ItemEntity, editMode: Bool) {
        self.title = item.title
        self.text = item.text
        self.type = item.type
        self.dueDate = item.dueDate
        self.item = item

        print(item.title)
        if self.title.isEmpty {
            print(self.title)
        }

        self.editMode = editMode

        print(self.editMode)
    }
}

当我 运行 应用程序时,它会在控制台中打印

2

true
4

true

我可以看到 init() 接收项目并正确设置 editMode,但我不明白为什么将标题、文本、类型和 dueDate 属性设置为其默认值而不是init 收到的项目。

它与@State 包装器有什么关系吗?我怎样才能将它们的值设置为我想要的值? 感谢您的帮助!

does it have anything to do with the @State wrapper?

是的,确实如此。状态应该通过 init 以下一种方式初始化(​​例如一个)

struct ItemDetailView: View {
    @State var title: String        // << no, default value
    ...

    init(item: ItemEntity, editMode: Bool) {
        self._title = State<String>(initialValue: item.title) // << explicitly !!
        ...