2017-05-07 144 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!。]