Как использовать переменную внутри тела представления, используя swiftUI? - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь использовать переменную и модифицировать ее внутри foreach из swiftui.

ниже приведен код, который я использую. пожалуйста, дайте мне знать, как я могу изменить значение внутри тела представления.

struct SearchView : View {
var chatmember = ChatMember(with: JSON())

var body: some View{
    VStack(spacing: 10){
        VStack{
            prefView()
                .padding(.bottom, 30)
            Text("Tap to start making friend")
        }
        ScrollView(.horizontal, content: {
            HStack(spacing: 10) {
                ForEach(userDataList) { user in
                     chatmember = ChatMember(hashValue: 0, email: "", fullName: "", online: "", userId: user.userId, userImage: "", deviceToken: "", deviceType: .iOS, deviceId: "")
                    NavigationLink(destination: ChatView(chatMember: self.chatmember)){
                        SearchUser()
                    }
                }
            }
            .padding(.leading, 10)
        })
            .frame(width: 300, height: 400)

        Spacer()
    }
    .navigationBarTitle("Profile",displayMode: .inline)
    .onAppear {
        self.userList()
    }
}


@State var userDataList = [UserModel]()
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)
                    }
                }
            }
        }
    }
}

}

ниже приведены сообщения об ошибках, которые я получаю:

'Int' is not convertible to 'CGFloat?'

Но это сообщение об ошибке не выглядит для меня правильным. Я получаю эту ошибку, потому что я пытался изменить чат-чата внутри foreach.

Спасибо

1 Ответ

2 голосов
/ 16 февраля 2020

Вы не можете изменить chatmember в своей функции тела, это должно быть сделано в clouser действия или за пределами области действия функции тела.

для заполнения вашей chatmember вы можете попробовать это:

добавьте .onAppear к месту назначения и установите своего чата

NavigationLink(destination: ChatView(chatMember: self.chatmember).onAppear {
                     chatmember = ChatMember(hashValue: 0, email: "", fullName: "", online: "", userId: user.userId, userImage: "", deviceToken: "", deviceType: .iOS, deviceId: "")
                    }){
                        SearchUser()

don't forget to set your `chatmember` to @State
...