Swift 如何像stackOverFlow一样增加/减少UpVote/DownVote?

Swift 如何像stackOverFlow一样增加/减少UpVote/DownVote?,swift,firebase,google-cloud-firestore,swiftui,iosdeployment,Swift,Firebase,Google Cloud Firestore,Swiftui,Iosdeployment,我有这段代码,它允许用户像堆栈溢出一样进行向上投票或向下投票。我的问题是文本(“\(likes)UpVote”).padding(.top,8) 不会立即刷新,相反,用户应该更改透视图以获得刷新的upvote/downvote。 如何改进这一点,以便用户只需单击其中一个按钮一次,即可立即更改它们 我的代码是这样的: import SwiftUI import SDWebImageSwiftUI import Firebase struct PostCellCard : View {

我有这段代码,它允许用户像堆栈溢出一样进行向上投票或向下投票。我的问题是
文本(“\(likes)UpVote”).padding(.top,8)
不会立即刷新,相反,用户应该更改透视图以获得刷新的upvote/downvote。 如何改进这一点,以便用户只需单击其中一个按钮一次,即可立即更改它们

我的代码是这样的:

import SwiftUI
import SDWebImageSwiftUI
import Firebase

struct PostCellCard : View {

    var user = ""
    var image = ""
    var id = ""
    var likes = ""
    var comments = ""
    var msg = ""
    var body : some View{

        VStack(alignment: .leading, content: {

            HStack{

                Image("person-icon-1675").resizable().frame(width: 35, height: 35).clipShape(Circle()).onTapGesture {
                    print("slide out menu ....")
                }
                HStack(alignment: .top){
                    VStack(alignment: .leading){
                        Text(user).fontWeight(.heavy)
                        Text(msg).padding(.top, 8)
                    }}
                Spacer()
                Button(action: {

                }) {

                    Image("menu").resizable().frame(width: 15, height: 15)
                }.foregroundColor(Color("darkAndWhite"))
            }
            if self.image != ""{
                AnimatedImage(url: URL(string: image)).resizable().frame(height: 250)
            }
            HStack{

                Button(action: {

                    let db = Firestore.firestore()
                    let like = Int.init(self.likes)!
                    db.collection("posts").document(self.id).updateData(["likes": "\(like - 1)"]) { (err) in

                        if err != nil{

                            print((err)!)
                            return
                        }

                        print("down updated....")
                    }

                }) {


                    Image(systemName: "arrow.down.to.line.alt").resizable().frame(width: 26, height: 26)
                }.foregroundColor(Color("darkAndWhite"))

                Button(action: {

                    let db = Firestore.firestore()
                    let like = Int.init(self.likes)!

                    db.collection("posts").document(self.id).updateData(["likes": "\(like + 1)"]) { (err) in
                        if err != nil{
                            print((err)!)
                            return
                        }

                        print("up updated....")
                    }

                }) {

                    Image(systemName: "arrow.up.to.line.alt").resizable().frame(width: 26, height: 26)
                }.foregroundColor(Color("darkAndWhite"))

                Spacer()

            }.padding(.top, 8)

            Text("\(likes) UpVote").padding(.top, 8)
            Text("\(likes) DownVote").padding(.top, 8)
            Text("View all \(comments) Comments")


        }).padding(8)
    }

}

您将为
likes
变量使用一个属性包装器,因此当您更改likes的数量时,它也将在文本上更改它

在您的案例中应该使用的是
@State
属性包装器,它看起来像这样

@State var likes = ""
关于属性包装器的更多信息,这里有一篇很好的文章解释它们

不幸的是,我不得不做了很多修改,以使它能够运行…这是我的代码,它可以工作-修改类似-当然,您可以将它改为int并增加它,而不仅仅是设置文本

struct ContentView : View {

    var user = ""
    var image = ""
    var id = ""
    @State var likes = ""
    var comments = ""
    var msg = ""
    var body : some View{
        VStack {

            HStack{

                Image(systemName:"circle").resizable().frame(width: 35, height: 35).clipShape(Circle()).onTapGesture {
                    print("slide out menu ....")
                    self.likes = "tapped"
                }
                HStack(alignment: .top){
                    VStack(alignment: .leading){
                        Text(user).fontWeight(.heavy)
                        Text(msg).padding(.top, 8)
                    }}
                Spacer()
                Button(action: {
                    self.likes = "aha"
                }) {

                    Image(systemName:"circle").resizable().frame(width: 15, height: 15)
                }.foregroundColor(Color("darkAndWhite"))
            }
            if self.image != ""{
                Text("Animated Image")
                //   AnimatedImage(url: URL(string: image)).resizable().frame(height: 250)
            }
            HStack{

                Button(action: {

                    self.likes = "oho"
                    print("button action")
                }) {

                    Image(systemName: "circle").resizable().frame(width: 26, height: 26)
                }.foregroundColor(Color("darkAndWhite"))

                Button(action: {

                    let like = Int.init(self.likes)!
                    print("action")
                    self.likes = "uhu"
                }) {
                    Text("aha")
//                    Image(systemName: "arrow.up.to.line.alt").resizable().frame(width: 26, height: 26)
                }.foregroundColor(Color("darkAndWhite"))

                Spacer()

            }.padding(.top, 8)

            Text("\(likes) UpVote").padding(.top, 8)
            Text("\(likes) DownVote").padding(.top, 8)
            Text("View all \(comments) Comments")

        }.padding(8)
    }
}

这没有帮助