Swift 3.2 iOS - 如何增加 Firebase MutableData 对象的 NSNumber?

Swift 3.2 iOS -How to Increment a NSNumber for Firebase MutableData Object?

在 Swift 中,我了解到 NSNumber 是包含标量数字的容器。

在 Firebase 中,您可以将 NSNumbers 发送到数据库,但不能发送 Ints。

我正在使用 Firebase Transactions 进行多次 likes/upvotes,我需要增加用户按下赞成按钮的次数。

这是我将数据发送到 Firebase 的代码:

likesRef?.runTransactionBlock({
       (currentData: MutableData) -> TransactionResult in

       var value = currentData.value as? NSNumber

       if value == nil{
           value = 0
       }

       let one: NSNumber = 1

       currentData.value = value! += one //error is here

       return TransactionResult.success(withValue: currentData)

我不断收到错误消息:

Binary operator '+=' cannot be applied to two 'NSNumber' operands

问题是我将 Firebase MutableData 类型传递给 success(withValue: ) 方法,而不是 NSNumber 值本身。我不能使用 NSNumber.intValue 因为 Firebase 不接受整数。

如何将两个 NSNumber 一起递增以作为 MutableData 对象的一部分发送到 Firebase?

试试这个:

let newValue: Int

if let existingValue = (currentData.value as? NSNumber)?.intValue {
    newValue = existingValue + 1
} else {
    newValue = 1
}

currentData.value = NSNumber(value: newValue)

您可以使用 UInt 而不是 Int。这对我有用:

.runTransactionBlock { (currentData) -> TransactionResult in

        if var value = currentData.value as? UInt {
            value += 1
            currentData.value = value
        } else {
            currentData.value = UInt(1)
        }

        return TransactionResult.success(withValue: currentData)
    }
}