我正在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
}
答案 0 :(得分:0)
如果用户已经投票,我将使用CoreData进行保存。
当用户对餐厅之一进行评分时,只需在核心数据中使用餐厅的名称或ID创建新记录。
在进行每次投票之前,我应该检查数据是否存在。否则,用户可以投票。