2015-06-12 7 views
0

Коллекция быть извлекается из файла JSON с помощью:Как добавить к NSMutableDictionary внутри NSArray?

if let collection = dictionary!.objectForKey("collection") as? NSMutableArray 

Следующая не работает:

for item in collection as! [NSMutableDictionary] 
{ 
    // mutating method sent to immutable object 
    item["row"] = 1 
} 

JSON:

{ 
    "collection": 
    [ 
     { 
      "row": 1, 
      "col": 0 
     }, 
     { 
      "row": 1, 
      "col": 1 
     }, 
     { 
      "row": 2, 
      "col": 0 
     } 
    ] 
} 
+0

да !? объект неизменен, почему вы хотите изменить значение? извлеките необходимую информацию, возможно, измените некоторые извлеченные данные, а затем перейдите на – luk2302

+0

Вот что я пытаюсь сделать. 'collection' - это извлечение, но я не могу изменить' NSMutableDictionary' внутри него. –

+0

Добавлен образец JSON. –

ответ

2

Ваш полученный объект JSON должен быть построен с изменяемые контейнеры, и вам необходимо также сбрасывать сборку.

let json = "{\"collection\":[{\"row\": 1,\"col\": 0},{\"row\": 1,\"col\": 1},{\"row\": 2,\"col\": 0}]}" 
if let 
    jsonData = json.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false), 
    dictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSMutableDictionary { 

    if let collection = dictionary["collection"] as? NSMutableArray { 
     for i in stride(from: 0, to: collection.count, by: 1) { 
      (collection[i] as! NSMutableDictionary)["row"] = 1 
     } 

    } 

} 

Вы также можете рассмотреть библиотеку JSON как SwiftyJSON

+0

Спасибо, это сработало! Из любопытства можно ли это сделать, не изменяя объект JSON? Как-то использовать 'array.mutableCopy()'. –

+0

@ChristopherMarkieta вы пытаетесь мутировать неизменный объект? это не сработает, независимо от того, что вы хотите или как вы думаете, что система работает. Если вы хотите мутировать контейнер, его нужно изменить. По большому счету по определению. –

+0

Нет, я хочу извлечь неизменяемый контейнер, добавить к нему некоторые свойства, а затем назначить его трансформируемому. –

Смежные вопросы