我有这段代码,只要用户点击邮件,就应该将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
)
如果有人可以帮我解决这种类型的错误,那就太棒了!
答案 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)")