web-dev-qa-db-ja.com

iOS Swift:値型「__NSCFNumber」を「NSString」にキャストできませんでした

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

エラーは、数量が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をチェックする必要はありません。

19
Nirav D

スイフト4:

let rollNumber:String = String(format: "%@", rollNumberWhichIsANumber as! CVarArg)
11
A.G

NSNumber値をこのような文字列に変換することもできます。これは文字列をフォーマットするより伝統的で基本的なアプローチです

 newDetail.setQuantity(String(format: "%@", quantity))
4
Dev_Tandel

スイフト4。

 newDetail.setQuantity(String(describing: rollNumberWhichIsANumber))
3
Joyal Clifford

In Swift 4.1およびXcode 9.4.1

newDetail.setQuantity(quantity: "(quantity)")

このような文字列に変換できます"\(quantity)"

0
iOS
let session_id  : Int32 = (jsonObject.value(forKey: "id") as! NSNumber).int32Value