ios - 我们如何使用 swiftUI 获取数据并像 viewdidload 一样显示
问题描述
我正在尝试使用 swiftUI,但我遇到了问题。我想从 firebase 获取数据并将该数据显示到列表中。我使用变异函数来修改变量。现在,当我调用该函数时,它给了我错误。我该如何解决这个问题请帮助我。下面是我正在使用的代码。
struct UserListView : View {
var body: some View{
VStack{
List{
VStack(alignment:.leading){
HStack{
Text("Favroute").frame(alignment: .leading).padding(.leading, 20)
Spacer()
Text("All").frame(alignment: .trailing)
}
ScrollView(.horizontal, content: {
HStack(spacing: 10) {
ForEach(0..<10) { index in
StatusView(statusImage: "nature")
}
}
.padding(.leading, 10)
})
.frame(height: 190)
}
ForEach(0..<10){_ in
HStack{
Group{
NavigationLink(destination: ChatView()){
UserImageView(imageName: "profileDummy").padding(.leading, 5)
Text("User Name").padding(.leading,10)
}
}
}.frame( height: 40)
}.environment(\.defaultMinListRowHeight, 40)
}
}
.navigationBarTitle("UserList",displayMode: .inline)
.onAppear {
self.userList()
}
}
var userDataList = [UserModel]()
mutating func userList() {
databaseReference.child(DatabaseNode.Users.root.rawValue).observe(.value) { (snapShot) in
if snapShot.exists(){
if let friendsDictionary = snapShot.value{
for each in friendsDictionary as! [String : AnyObject]{
print(each)
if let user = each.value as? [String : Any]{
let data = UserModel(userId: JSON(user["userId"] ?? "").stringValue, name: JSON(user["name"] ?? "").stringValue)
print(data)
self.userDataList.append(data)
}
}
}
}
}
}
}
以下是我收到的错误消息:
Cannot use mutating member on immutable value: 'self' is immutable
解决方案
你应该userDataList
像这样声明你的财产@State var userDataList = [UserModel]()
。这样,这个属性将由 SwiftUI 存储在你的结构之外,并且可以被改变。
推荐阅读
- python - 忽略 DataFrame 上多个过滤器中的无效过滤器
- ubuntu - 在同一台服务器上部署快速后端和响应前端时遇到问题
- django - “已解决”两种形式一提交按钮错误| IndentationError:需要一个缩进块
- reactjs - 如何在 React 和 Webpack 项目中使用来自Sharp模块的图像
- javascript - 如何突出行和列之间值的相似性?
- ios - Swift Xcode Files 文件夹未正确显示
- c# - 由于同一范围内的另一个任务抛出异常而处于不确定状态的任务的命运是什么?
- sql - CASE WHEN 多个部分匹配 BigQuery
- php - 使用 PHP 连接到另一台计算机上的 SQL Server
- c - Linux Kernel 我应该将 asmlinkage 用于实现系统调用的函数吗?