2017-11-05 2 views
0

Swift에서 NSNumbers는 스칼라 숫자가 포함 된 컨테이너라는 것을 알고 있습니다.Swift 3.2 iOS - Firebase MutableData 객체의 NSNumber를 증가시키는 방법?

InFirebase NSNumbers를 데이터베이스에 보낼 수 있지만 Ints는 보낼 수 없습니다.

많은 수의 좋아하는/upvotes에 대해 Firebase Transactions를 사용하고 있으며 사용자가 upvote 버튼을 누른 횟수를 늘려야합니다.

여기 중포 기지로 데이터를 전송하는 내 코드입니다 :

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

enter image description here

문제는 난에 Firebase MutableData 유형을 통과하고있어한다 success(withValue:) 메서드가 아니라 NSNumber 값 자체. Firebase가 Ints를 허용하지 않기 때문에 NSNumber.intValue을 사용할 수 없습니다.

어떻게 MutableData 객체의 일부로 Firebase에 보낼 NSNumbers 두 개를 증가시킬 수 있습니까?

답변

1

이 시도 :

let newValue: Int 

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

currentData.value = NSNumber(value: newValue) 
+0

덕분에, 나는 (currentData를 시간 정도의 몇을 시도하고 다시 내가 여는 중괄호 ** 전에 두 번째 줄에 오류가 계속 당신 –

+0

을 얻을 수 있습니다. 값? NSNumber) ?. 값 **. 오류는 ** ""가치 "의 모호한 사용 **입니다. ** (currentData.value as NSNumber)? intValue **를 대신 사용했고 효과가있었습니다. 스위프트 3.2를 사용하고 있습니다 ** ** intValue ** ** value **를 전환하여 업데이트해야 할 수도 있습니다. 그 외의 답변은 훌륭합니다! 감사 :) –

0

대신 지능의 UINT를 사용할 수 있습니다. 이것은 나를 위해 작동 :

.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) 
    } 
} 
관련 문제