2016-06-26 9 views
-2

私はNSDictionaryを持っており、その中に整数からなる配列があり、特定のインデックスで整数を変更しようとしています。私はあなたがオペレータas!の結果に割り当てることはできませんCannot assign to immutable expression of type Intなぜintは不変ですか?

var avafdg = object["Availability"] as? NSDictionary //I am importing the Dictionary from Parse, and it is imported correctly. 
avafdg![0]![12] as! Int = 1 // I get the error here 
+2

無料のヒント:1- NSMutableDictionaryを使用してください。 2-実際には、しないでください:Foundationのクラスの代わりにSwift辞書を使用してください。 3-アンラップを強制しないでください。もし 'if let'のような安全なコードを使用してください。 4 - 配列のような辞書を使用しないでください。必要に応じて配列を使用します。 – Moritz

+0

'として! Int'はコンパイラに強制的に添え字の* result *をキャストするように指示します。したがって、そのステートメントで試して割り当てることは意味がありません。強制的なダウンキャストを取り除いてから、Ericが上で述べたことをすべて実行してください.WindowsでObjective-Cとのインタフェースの手段としてSwiftのNSDictionaryを使用する必要があります(暗黙のうちに行われることはほとんどありません。それを直接使用してください)。 Swiftの土地に戻ったら、それをSwiftコレクションに戻してください。 – Hamish

+0

私は強制的なダウンキャストをやめましたが、今は '不変式のAnyObject型に代入できません。 ' – manatee

答えて

1

かかわらず、このエラーを取得しています。あなたは

avafdg![123] = 456 

を書くときDictionaryの添字[]オペレータがその中でトリッキーですスウィフトは、この割り当てを処理するために、updateメソッドを呼び出すために知っています。しかし、いったんキャストを行うと、割り当てはもはや不可能になります。実際には、それはもはや理にかなって、加算演算、たとえば、結果への代入と同じ理由で、意味がないだろう。

x+5 = 6 // <<== Will not compile 

幸いにも、あなたがIntにキャストする必要はありません。新しいIntをあなたの辞書に保存するために。

var innerDictionary = avafdg![0] as NSMutableDictionary! 
innerDictionary[12] = 1 

*私はそれがNSMutableDictionaryであると仮定していますが、それは同様NSMutableArray可能性に応じて:あなたはどんな最初の間接によって返されることは、あまりにも、NSMutableDictionary*であることスウィフトを伝える必要がありますあなたが持っているデータ構造。

+0

私はもっと大きなNSDictionaryを持っていて、そこに挿入する必要がありますが、どうすればいいでしょうか。私の現在の解決策は 'avafdgtest![5] as! NSMutableArray = innerDictionary'しかし、私はNSMutableArrayに関して上記と同じエラーを受け取ります。 – manatee

+0

@manateeキャストはカッコ内になければならず、代入は '[] '演算子の結果に対して直接行わなければなりません。 '(avafdgtest![5] as!NSMutableArray)[12] = 1'を試してみてください – dasblinkenlight

関連する問題