如何在 SwiftUI 中修改列表数据
Posted
技术标签:
【中文标题】如何在 SwiftUI 中修改列表数据【英文标题】:How to modify List Data in SwiftUI 【发布时间】:2019-11-20 16:33:49 【问题描述】:当用户点击该项目时,我想更改与列表中的项目关联的对象的值,我收到下一个错误“无法分配给属性:'student' 是 'let' 常量”。我该如何防止这种情况发生?
这是我的代码:
import SwiftUI
var students: [Student] = load("studentsData.json")
struct StudentsListView: View
@EnvironmentObject var viewRouter:ViewRouter
var body: some View
NavigationView
List(students)student in
Button(action:
student.isInClass = true
)
StudentItemListView(student: student)
struct StudentsListView_Previews: PreviewProvider
static var previews: some View
StudentsListView().environmentObject(ViewRouter())
struct StudentItemListView: View
var student:Student
var body: some View
HStack
Image("profile")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width:50, height:50)
.clipShape(Circle())
VStack(alignment: .leading)
Text(student.firstName + " " + student.lastName)
.font(.headline)
if(student.isInClass == true)
Text("Asistió")
.font(.subheadline)
.foregroundColor(.green)
else
Text("Faltó")
.font(.subheadline)
.foregroundColor(.red)
Spacer()
.padding()
【问题讨论】:
你应该使用@State,例如:medium.com/flawless-app-stories/… 【参考方案1】:正如评论中提到的@koen,您应该使用@State
或@EnvironmentObject
在您的SwiftUI 视图中访问/更改变量和状态。
与 UIKit 不同,您可能会注意到 SwiftUI 如何依赖于大量使用结构。默认情况下,结构是不可变的,这意味着您不能在不明确告诉编译器结构是可变的(使用var
关键字等)的情况下修改结构的任何部分。在 SwiftUI 中管理状态的方法是使用Combine
框架和@State
属性的使用等。简单看一下您的代码,您似乎只需将@State var student: Student
添加到您的StudentItemListView
。
如果这听起来令人困惑,或者您不知道@State
可能是什么,我强烈建议您观看2019 WWDC videos 并查看Apple 提供的SwiftUI tutorial。
【讨论】:
以上是关于如何在 SwiftUI 中修改列表数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中使用 CoreData 更改数据值?