2016-11-25 197 views
3

我从我的Firebase数据库(JSON数据库)中检索数字值,然后将此数字显示为textField,尽管我在尝试显示它。iOS Swift:无法将值类型'__NSCFNumber'转换为'NSString'

未能投值类型“__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) 
} 

回答

10

错误是说,你的数量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) 
} 

或单if语句

if let quantity = child.childSnapshot(forPath: "quantity").value, 
    (num is NSNumber || num is String) { 
    newDetail.setQuantity(quantity: "\(quantity)) 
} 

使用没有必要检查无第二个和第三个选项。

+0

我们不能使用'.description'吗? –

+0

第二个选项有效,但不是当数量值是以字符串值开始时。是否有一个'else if'语句可以用来检查值是否是一个String? – n00bAppDev

+0

太好了,谢谢!这个答案和上面的答案都是一样的,我选择哪一个作为答案? – n00bAppDev

3

可以将您的NSNumber值转换为字符串,这样太,其较传统和基本方法格式化字符串

newDetail.setQuantity(String(format: "%@", quantity)) 
+0

这个作品也很完美!我只是将它封装在我的支票中,如果是空的。谢谢! – n00bAppDev

+0

你已经检查过会有价值,所以没有再写一遍。 –

+0

@Dev_Tandel没有必要使用'NSString(format:)'你可以使用'String(format:)'来实现。 –

3

斯威夫特4:

let rollNumber:String = String(format: "%@", rollNumberWhichIsANumber as! CVarArg) 
0

斯威夫特4.

newDetail.setQuantity(String(describing: rollNumberWhichIsANumber)) 
相关问题