Swift如何使用Firebase为用户投票添加5星评级

时间:2018-08-25 20:18:59

标签: swift uitableview firebase firebase-realtime-database

我正在Swift中创建一个餐厅评分应用程序,该应用程序允许其用户以5星级评分标准对餐厅进行评分(就像Zomato和Yelp一样)。 我将使用Firebase存储特定餐厅的每个用户的评分,然后取用户评分的平均值并将其显示在应用程序中。每个Tableview单元(每个TableView单元对应一个餐厅)都将有一个星级评分。

但是我对这个项目深感兴趣。我不知道如何将用户的评分添加到数据库中。我的应用程序不需要用户注册或登录页面,用户可以直接为餐厅评分。话虽这么说,我又如何确保用户只能为一家餐厅投票一次?我将不胜感激!预先谢谢你。

到目前为止,这是我的代码:

var starsRating = 0
var starsEmptyPicName = "star" // can change to empty star picture name
var starsFilledPicName = "starfill" // can change to filled star picture name
override func draw(_ rect: CGRect) {
let starButtons = self.subviews.filter{$0 is UIButton}
var starTag = 1
for button in starButtons {
    if let button = button as? UIButton{
        button.setImage(UIImage(named: starsEmptyPicName), for: .normal)
        button.addTarget(self, action: #selector(self.pressed(sender:)), for: .touchUpInside)
        button.tag = starTag
        starTag = starTag + 1
    }
}
setStarsRating(rating:starsRating)
}

func setStarsRating(rating:Int){
self.starsRating = rating
let stackSubViews = self.subviews.filter{$0 is UIButton}
for subView in stackSubViews {
    if let button = subView as? UIButton{
        if button.tag > starsRating {
            button.setImage(UIImage(named: starsEmptyPicName), for: .normal)
        }else{
            button.setImage(UIImage(named: starsFilledPicName), for: .normal)
        }
    }
  }
 }

@objc func pressed(sender: UIButton) {
    setStarsRating(rating: sender.tag)

 }
} 

这是我的tableview函数:

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
 return identifiers.count //identifiers is my big restaurants array
}



 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "CellThree")
        cell.textLabel!.text = identifiers[indexPath.row]
        return cell
    }

1 个答案:

答案 0 :(得分:0)

如果用户已经投票,我将使用CoreData进行保存。

  1. 当用户对餐厅之一进行评分时,只需在核心数据中使用餐厅的名称或ID创建新记录。

  2. 在进行每次投票之前,我应该检查数据是否存在。否则,用户可以投票。