2017-05-07 146 views
0

我想运行下面的代码,但无法转换rest.value而没有前面的“可选”。以下是代码试图解决这个问题时,我得到:无法将anyObject转换为字符串

//for Withdrawl children 
    transRef.child("Withdraw").observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
     //creates enumerator of the snapshot children for 
     let enumerator = snapshot.children 
     while let rest = enumerator.nextObject() as? FIRDataSnapshot { 
      let curString = (rest.value) as! String 
      self.anArray.append(curString) 

      //printing the rest.value to make sure there are children to iterate through 
      print(rest.value) 
     } 
     self.tableView.reloadData() //<<<<<<<<<<<< RELOAD TABLEVIEW 
    }) 

这是我收到的错误:Could not cast value of type '__NSCFNumber' (0x10d068368) to 'NSString'

+0

可能的复制[iOS Swift:无法将值类型'\ _ \ _ NSCFNumber'转换为'NSString'](http://stackoverflow.com/questions/40798220/ios-swift-could-not-cast-value-type-nscfnumber-到的NSString) – Sasang

回答

2

根据该火力地堡文档的值属性:“返回此数据快照作为本地类型的内容数据类型返回:+的NSDictionary +的NSArray +的NSNumber (还包括布尔值)+ NSString“。

var返回一个Any?以处理这种多功能性。

在这种情况下,它看起来像是返回一个NSNumber,所以String转换失败。我不确定这个场景中的值的上下文,但是如果你确信它每次都可以将它转换为数值类型时会返回一个数字(Swift/Objective-C桥接允许NSNumber被转换到Swift中的任何基本数字类型),然后将它传递给一个字符串初始值设定项以获取一个字符串。例如:

let curNumber = rest.value as! Double 
let curString = String(curNumber) 

如果你不知道将返回什么类型,但希望把它放到一个字符串数组那么你或许应该检查你施放如前:

if let curNumber = rest.value as? Double { 
    let curString = String(curNumber) 
    self.anArray.append(curString) 
} 
2

相反的(rest.value) as! String,说[斯威夫特2] String(rest.value)或[斯威夫特3] String(describing:rest.value) 。 [如果rest.value是可选的,那么说,在那些制剂rest.value!。]