2017-05-07 21 views
0

次のコードを実行しようとしていますが、前の「オプション」なしでrest.valueを変換できません。代わりに(rest.value) as! StringCould not cast value of type '__NSCFNumber' (0x10d068368) to 'NSString'任意のオブジェクトを文字列に変換できません

+0

可能な重複:あなたが返される種類がわからないですが、あなたが例えばキャストする前に、あなたはおそらく、チェックすべき文字列の配列にそれを置くことを期待している場合は

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

[iOS Swift:値タイプ '\ _ \ _ NSCFNumber'を 'NSString'にキャストできませんでした](http://stackoverflow.com/questions/40798220/ios-swift-could-not-cast-value-type-nscfnumber- to-nsstring) – Sasang

答えて

2

Firebaseのドキュメントによると、「このデータスナップショットの内容をネイティブタイプとして返​​します。返されるデータ型:+ NSDictionary + NSArray + NSNumber (ブーリアンも含む)+ NSString "

varはAnyを返しますか?この汎用性に対処するためです。

この場合、NSNumberを返すように見えるので、Stringキャストは失敗します。私はこのシナリオでの値のコンテキストを正確にはわかりませんが、数値型にキャストするたびに数値を返すことが確実であれば(Swift/Objective-CブリッジでNSNumberをキャストすることができますSwiftのプリミティブな数値型のいずれかに)、それをString初期化子に渡してStringを取得します。例えば:

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

は、[スウィフト2] String(rest.value)または[スウィフト3] String(describing:rest.value)を言う:

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

これは私が受けていますエラーは次のとおりです。次は、この問題を解決しようとすると、私が手のコードです。 [rest.valueがオプションの場合は、rest.value!と記述してください。]

関連する問題