2015-08-21 2 views
0

Имейте объект JSON со всеми цепочками и объект JSON со всеми сообщениями из определенного разговора. Те объекты JSON анализируются и помещают значения в словарь, а затем в массив. Пока все хорошо, это работает так, как ожидалось.Swift: хотите добавить Array в существующий словарь

func didReceiveConversations(result: JSON) { 
    var conversationsArray = [AnyObject]() 

    for (key: String, subJson: JSON) in result["Data"] { 
     var conversationDictionary = [String: AnyObject]() 
     conversationDictionary["DeviceOnline"] = subJson["DeviceOnline"].boolValue 
     conversationDictionary["Id"] = subJson["Id"].stringValue 

     self.conversationsArray.append(conversationDictionary) 
    } 
} 

conversationsArray заполняется следующим образом:

[{ 
    Id = "94cc96b5-d063-41a0-ae03-6d1a868836fb"; 
    DeviceOnline = 1; 
}, { 
    Id = "4b321903-af6a-405d-ac4f-c0799a7f714a"; 
    DeviceOnline = 1; 
}] 

Затем я создаю messagesArray, который содержит словарь со значениями:

func didReceiveResultSpecificConversation(result: JSON) { 
    var messagesArray = [AnyObject]() 

    for (key: String, subJson: JSON) in result { 
     var messageDictionary = [String: AnyObject]() 

     messageDictionary["MessageId"] = subJson["MessageId"].stringValue 
     messageDictionary["MessageText"] = subJson["MessageText"].stringValue 

     messagesArray.append(messageDictionary) 
    } 

    // I guess here comes the code to add the messages to the conversationsArray 
    // in the Dictionary under a key: "Messages" for example so I tried this: 
    for conversation in self.conversationsArray { 
     if conversation["Id"] as! String == messagesArray[0]["ConversationId"] as! String { 
      conversation["Messages"] = messagesArray as [String: AnyObject] 
     } 
    } 
    // This gives me: Cannot assign a value of type '[String: AnyObject]' to 
    // a value of type 'AnyObject?!' 


    messagesArray.removeAll(keepCapacity: false) 
} 

Я думал, что в настоящее время добавления messagesArray к conversationsArray (создав новый ключ: «Сообщения» и заполнение значения messageArray) было довольно прямолинейным, но я не могу заставить его работать. Я пробовал в цикле, проходящем через цепочку, но я продолжаю получать ошибки с типами и т. Д.

Конечный результат conversationsArray должно быть что-то вроде этого:

[{ 
    Id = "94cc96b5-d063-41a0-ae03-6d1a868836fb"; 
    DeviceOnline = 1; 
    Messages [{ 
     MessageId = "1" 
     MessageText = "Foo" 
    },{ 
     MessageId = "2" 
     MessageText = "Bar" 
    }] 
}, { 
    Id = "4b321903-af6a-405d-ac4f-c0799a7f714a"; 
    DeviceOnline = 1; 
    Messages [{ 
     MessageId = "1" 
     MessageText = "Hello" 
    },{ 
     MessageId = "2" 
     MessageText = "World" 
    }] 
}] 

Может кто-то мне точку в правильном направлении, потому что я должен быть отсутствующий что-то очень простое здесь. Благодаря!

+0

вы можете поделиться ссылкой вашего кода? поэтому я могу попробовать для решения – Bhupesh

+0

Извините, что не можете поделиться проектом, так как части находятся под NDA. Я думаю, что проблема связана с «для разговора в self.conversationsArray». Должно быть довольно близко, я думаю .. – Hugo

+0

Вы не можете поделиться демонстрацией? со статическим ответом – Bhupesh

ответ

1

Поскольку вы знаете, что все ключи словаря являются String, определяют как массивы с более конкретным типом, как

[Dictionary<String,AnyObject>]() 
+0

Это было решение, и я действительно должен был указать оба массива, чтобы быть более конкретными. Я знал, что это была небольшая вещь, которую я пропускал. Благодаря! – Hugo

0

Я буду для простейшего объяснения здесь, но если вы получаете сообщение об ошибке:
Cannot assign a value of type '[String: AnyObject]' to a value of type AnyObject

не пытался бы отдать свой массив AnyObject работы?

conversation["Messages"] = messagesArray as AnyObject

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