我正在尝试实施一个投票按钮,以便用户可以对帖子进行投票。类似于功能的东西。为此,我在单元格视图控制器中使用IB操作,如下所示
@IBAction func vote(sender: AnyObject) {
if (parseObject != nil) {
if var votes:Int? = parseObject!.objectForKey("votes") as? Int {
votes!++
parseObject!.setObject(votes!, forKey: "votes")
parseObject!.saveInBackgroundWithTarget(nil, selector: nil)
votesLabel?.text = "\(votes!) votes"
}
然后我将下面的代码放在集合视图控制器中,如果列中没有任何内容,标签将显示为0.
if var votes:Int? = parseObject!.objectForKey("votes") as? Int {
if votes == nil{
votes = 0}
cell.votesLabel?.text = "\(votes!) votes"
}
return cell
}
我的代码中没有错误,但是一旦我构建应用程序,它就会在解开指向突出显示的代码的Optional值时意外地发现nil。我实施这个错误的方式了吗?谢谢。
答案 0 :(得分:1)
您可以尝试使用可选链接,而不是强制解包。所以整个表达式将返回nil
而不是抛出错误。
if var votes:Int? = parseObject?.objectForKey("votes") as? Int {
修改强>
让Swift推断出变量的类型也是一种更好的做法,所以:
if var votes = parseObject?.objectForKey("votes") as? Int {
答案 1 :(得分:0)
尝试以下代码:
@IBAction func vote(sender: AnyObject) {
if (parseObject != nil)
{
if let votes = parseObject!.objectForKey("votes") as? Int {
parseObject!.setObject(votes + 1, forKey: "votes")
parseObject!.saveInBackgroundWithTarget(nil, selector: nil)
votesLabel?.text = "\(votes + 1) votes"
}
else
{
parseObject!.setObject(1, forKey: "votes")
parseObject!.saveInBackgroundWithTarget(nil, selector: nil)
votesLabel?.text = "1 votes"
}
}
在集合视图控制器
中if (parseObject != nil)
{
if let votes = parseObject!.objectForKey("votes") as? Int {
cell.votesLabel?.text = "\(votes) votes"
}
else
{
cell.votesLabel?.text = "0 votes"
}
}
return cell