Swift:二元运算符' +'不能应用于类型' AnyObject的操作数?'和' Int'

时间:2016-08-22 17:10:19

标签: swift firebase firebase-realtime-database

我有这段代码,只要用户点击邮件,就应该将Firebase变量的分数增加1:

cell!.arrowButtonTapped = { (button:UIButton) -> Void in

                if (self.selectedIndex == indexPath.row){
                    self.selectedIndex = -1
                }else{
                    self.selectedIndex  = indexPath.row
                }

                self.tableview.beginUpdates()
                self.tableview.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
                self.tableview.endUpdates()
} 

但是我在第

行收到错误override func collectionView(collectionView: JSQMessagesCollectionView!, didTapMessageBubbleAtIndexPath indexPath: NSIndexPath!) { super.collectionView(collectionView, didTapMessageBubbleAtIndexPath: indexPath) let data = self.messages[indexPath.row] print("They tapped: " + (data.text) + "- " + (data.senderDisplayName)) rootRef.child("messages").child(data.senderId).child("score").runTransactionBlock({ (currentData: FIRMutableData) -> FIRTransactionResult in // Set value and report transaction success currentData.value = currentData.value + 1 return FIRTransactionResult.successWithValue(currentData) }) { (error, committed, snapshot) in if let error = error { print(error.localizedDescription) } }
No '+' candidates produce the expected contextual result type 'AnyObject?'
由于某些我无法弄清楚的原因。

我尝试像currentData.value = currentData.value + 1 以及currentData.value = currentData.value + 1 as! Int一样投射整数,但是Swift没有(它说currentData.value as! Int = currentData.value + 1

如果有人可以帮我解决这种类型的错误,那就太棒了!

3 个答案:

答案 0 :(得分:2)

尝试

currentData.value  = currentData.value as! Int + 1

因为currentData.value的类型是可选的AnyObject,你必须将其强制转换为Int

答案 1 :(得分:1)

  

currentData.value = currentData.value + 1 as! INT

这里将'1'转换为int,因此currentData.value仍然具有未知类型

  

currentData.value as! Int = currentData.value + 1

在这里,您将要分配数据的变量转换为int,但是您添加到1的内容仍然具有未知类型

试试这个:

if let myValue = currentData.value as? Int{
    currentData.value = myValue + 1
    return FIRTransactionResult.successWithValue(currentData)
}

答案 2 :(得分:0)

您要检索的数据值可能是多种类型之一,Firebase支持将其设置为NSNumber,字符串,字典,数组等(请参阅https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_mutable_data

相反,当您获得该值时,您需要通过将其转换为NSNumber并从中获取intValue来帮助Swift了解它的具体类型。 AnyObject过于通用,无法执行' +'

等操作

如果您确定该值始终是NSNumber,您应该可以这样做:

currentData.value = (currentData.value as! NSNumber).intValue + 1

否则,您应首先检查类型并采取相应措施。

如果您将此代码放在游乐场中,它会产生预期的结果,6:

import Foundation
let myValue: AnyObject? = NSNumber(value: 5)
let addIt = (myValue as! NSNumber).intValue + 1
print("\(addIt)")