Как мы получаем данные и показываем как viewdidload, используя swiftUI - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь работать с 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

1 Ответ

0 голосов
/ 15 февраля 2020

Вы должны объявить свою собственность userDataList примерно так @State var userDataList = [UserModel](). Таким образом, это свойство будет храниться SwiftUI вне вашей структуры и может быть изменено.

...