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)
}
}
在 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)
}
}