2016-06-15 3 views
0

私はCoreDataのコードを書いていました。私のデータモデルにはnameとmoneyAmountが含まれています。ここで今、問題は私のmoneyManager.addMoneyStringDoubleを必要とすることであるコアデータとタイプAnyObjectからdoubleを作成しますか? Swift

do { 
     let request = NSFetchRequest(entityName: "MoneyData") 
     let results = try context.executeFetchRequest(request) 
     if results.count > 0 { 
      for item in results as! [NSManagedObject] { 
       let name = String(item.valueForKey("name")) 
       let moneyAmount = item.valueForKey("moneyAmount") 
       moneyManager.addMoney(name, moneyAmount: moneyAmount) 
      } 
     } 
    } catch { 
     print("There was an error saving data") 
    } 

と私は悩みを持っているコードの一部です。しかし、このコードでは、私が得るエラーは次のようになります。

オプションチェーンは効果がなく、「Anyオブジェクト」を生成しています。

AnyObject型の値を変換できませんか?予想される引数型「Double」

意味が分かりませんAnyobject。私はそれが正しく動作するように任意のオブジェクトを二重に変換する必要があると思いますか?それは参照のオブジェクトの種類をコンパイル時に知る方法はありませんので、あらかじめ

おかげ

+0

moneyAmountがDoubleになっている場合は、let moneyAmount = item.valueForKey( "moneyAmount")を次のようにキャストできます。 Double – Bhushan

+0

moneyAmountが2倍であることを確認しましたか?例えば次のようなものがあります:let moneyAmount = Double(item.valueForKey( "moneyAmount")) – Dominic

+0

はい、私は実際にそれらの両方を行いました。私はドミニクが言ったことを試してみたが、二重にしかならないにもかかわらずまだエラーが出ている – KarolisShp

答えて

1

valueForKey()はタイプAnyObjectのオブジェクトを返します。 asを使用して特定のタイプにキャストできます。たとえば、moneyAmount as? Doubleは、数値が含まれているタイプDouble?のオブジェクト、またはDoubleのオブジェクトでない場合はnilのオブジェクトになります。

+0

ありがとう、それは今働いた。しかし、そうでない場合はどうしますか?むしろ!私は具体的にタイプがダブルになることを知っているので? – KarolisShp

+1

'as? 'の代わりに' as!'を使うと、 'Double'になると確信しています。値は' nil'にならないでしょう。しかし、それが 'Double'ではなく' as! 'を使うと、あなたのアプリはクラッシュするでしょう – Olivier

関連する問題