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

Posted

技术标签:

【中文标题】如何像***一样增加/减少UpVote/DownVote?【英文标题】:How to make increase/Decrease the UpVote/DownVote like ***? 【发布时间】: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)
    


【问题讨论】:

【参考方案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

【讨论】:

这没有帮助

以上是关于如何像***一样增加/减少UpVote/DownVote?的主要内容,如果未能解决你的问题,请参考以下文章

如何使magento过滤器像类别一样工作

如何在作弊引擎中找到不变的地址

附加作业

如何更改滚动视图的 alpha 值

在 JavaScript 或 jQuery 中增加和减少数量时如何计算价格?

eclipse 的鼠标悬停增加单词翻译功能,就像下图一样怎样设置,或者需要装哪个插件?