在 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 !!
...
我正在编写一个待办事项列表应用程序,但在初始化详细信息视图时遇到了问题。 在 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 !!
...