如何像***一样增加/减少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?的主要内容,如果未能解决你的问题,请参考以下文章