2016-06-23 17 views
1
var arr_contacts2 = [AnyObject]() 

ViewDidLoad(){ 
for contacts in info { 

      var dict_contact = [String:AnyObject]() 

      dict_contact["id"] = contacts.contact_id 
      dict_contact["type"] = contacts.type 
      dict_contact["value"] = contacts.value 

      arr_contacts2.append(dict_contact) 
     } 
    } 


IBAction(){ 
var dict_contact = arr_contacts2[0] 
dict_contact["value"] = "gg" //Cannot assign to immutable expression of type 'AnyObject?!' 
} 

なぜこのエラーが発生しますか? コードに何が間違っていますか?anyオブジェクトの不変式に割り当てることはできません

これを解決するのを手伝ってください。

+0

以下のように私たちのarr_contacts2はこの '許可すればdict_contact = arr_contacts2 [0]などのようにしてみてください? [String:AnyObject] {dict_contact ["value"] = "gg"} ' –

+0

@ EICaptainv2.0、あなたの答えをありがとう。 'arr_contacts2 [0] [" value "] =" gg "'のような配列に直接変更することはできませんか? – user2526811

+0

@ EICaptainv2.0、配列内の辞書の値を直接変更できますか? – user2526811

答えて

3

ISSUE:

var dict_contact = arr_contacts2[0] // IT ASSIGNS object of type "AnyObject" to dict_contact 
//compiler couldn't possibly know, that dict_contact have a dictionary value 

func IBAction(){ 
    guard let dict_contact = arr_contacts2[0] as? [String:AnyObject] 
     else{ 
      return 
     } 
    var contactInfo = dict_contact 
    contactInfo["value"] = "gg" //Now it should work 
    } 

OR

Yを宣言し、以下のようにUPDATE YOUR CODE

var arr_contacts2 = [[String:AnyObject]]() 
+0

あなたの答えをありがとう。 arr_contacts2 [0] ["value"] = "gg"のような配列に直接変更することはできませんか? – user2526811

+1

var dict_contact = arr_contacts2 [0] // "AnyObject"型のオブジェクトをdict_contactにアサートする //コンパイラが辞書の値を持っていることをコンパイラが知ることができなかったため、直接操作することはできません。それをキャスト! –

+0

ok、アレイ内の辞書の値を直接変更する方法はありますか? – user2526811

1

arr_contacts2はタイプ[AnyObject]のあるお時間をいただき、ありがとうございます。

contactは、AnyObjectです。

Stringcontact["value"]に割り当てることはできません。

arr_contacts2[[String: Any]]に変更すると機能します。コード内で

関連する問題