【问题标题】:How to make increase/Decrease the UpVote/DownVote like stackOverFlow?如何像stackOverFlow一样增加/减少UpVote/DownVote?
【发布时间】:2019-12-07 02:10:17
【问题描述】:

我有这段代码,它允许用户像堆栈溢出一样进行赞成或反对。我的问题是Text("\(likes) UpVote").padding(.top, 8) 不会立即刷新,而是用户应该更改视角以获得刷新的赞成/反对票。 如何改进这一点,以便用户只能单击其中一个并立即更改它们?

这就是我的代码的样子:

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)
    }

}

【问题讨论】:

    标签: swift firebase google-cloud-firestore swiftui iosdeployment


    【解决方案1】:

    不幸的是,我不得不进行很多更改才能运行...所以这是我的代码,它可以工作-更改喜欢-当然您可以从中创建一个 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)
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以为 likes 变量使用属性包装器,因此当您更改喜欢的数量时,它也会在 Text 上随意更改。

      在您的情况下应该工作的是@State 属性包装器,它看起来像这样......

      @State var likes = ""
      

      有关属性包装器的更多信息,这里有一篇很好的文章解释了它们 https://www.hackingwithswift.com/quick-start/swiftui/understanding-property-wrappers-in-swift-and-swiftui

      【讨论】:

      • 这没有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 2010-10-20
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多