Firebaseデータベース(JSON db)から数値を取得し、この数値をtextField
に表示していますが、表示しようとするとこのエラーが発生します。
値型「__NSCFNumber」を「NSString」にキャストできませんでした
取得した値を文字列と数値の間で変更する可能性があることを考慮して、取得した値を適切に文字列に変換するにはどうすればよいですか?.
ここに私のコードがあります:
let quantity = child.childSnapshot(forPath: "quantity").value // Get value from Firebase
// Check if the quantity exists, then add to object as string.
if (!(quantity is NSNull) && ((quantity as! String) != "")) {
newDetail.setQuantity(quantity: quantity as! String)
}
エラーは、数量がNumber
であり、数値をString
に直接変換できないことを示しています。このようにしてください。
newDetail.setQuantity(quantity: "\(quantity)")
または
if let quantity = child.childSnapshot(forPath: "quantity").value as? NSNumber {
newDetail.setQuantity(quantity: quantity.stringValue)
}
else if let quantity = child.childSnapshot(forPath: "quantity").value as? String {
newDetail.setQuantity(quantity: quantity)
}
またはWith ifステートメント
if let quantity = child.childSnapshot(forPath: "quantity").value,
(num is NSNumber || num is String) {
newDetail.setQuantity(quantity: "\(quantity))
}
2番目と3番目のオプションを使用すると、nilをチェックする必要はありません。
スイフト4:
let rollNumber:String = String(format: "%@", rollNumberWhichIsANumber as! CVarArg)
NSNumber値をこのような文字列に変換することもできます。これは文字列をフォーマットするより伝統的で基本的なアプローチです
newDetail.setQuantity(String(format: "%@", quantity))
スイフト4。
newDetail.setQuantity(String(describing: rollNumberWhichIsANumber))
In Swift 4.1およびXcode 9.4.1
newDetail.setQuantity(quantity: "(quantity)")
このような文字列に変換できます"\(quantity)"
let session_id : Int32 = (jsonObject.value(forKey: "id") as! NSNumber).int32Value