ios - Swift:想要将数组添加到现有字典

标签 ios swift dictionary

拥有一个包含所有对话的 JSON 对象,以及一个包含来自特定对话的所有消息的 JSON 对象。这些 JSON 对象被解析并将值放入字典中,然后放入数组中。到目前为止一切顺利,这符合预期。

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 添加到对话数组(通过创建一个新键:“Messages”,并用 messagesArray 填充该值)非常简单,但我似乎无法让它工作。我已经尝试在 for 循环中进行对话,但我不断收到类型和内容的错误。

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"
    }]
}]

有人能指出我正确的方向吗,因为我一定错过了一些非常简单的东西。谢谢!

最佳答案

因为您知道所有字典键都是String,所以将两个数组定义为更具体的类型

 [Dictionary<String,AnyObject>]()

关于ios - Swift:想要将数组添加到现有字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32138719/

相关文章:

ios - iOS 上的 Cordova/PhoneGap UI 响应能力

ios - 如何检测非侵入式电话

dictionary - 插入 map 时,Go(深)复制键吗?

dictionary - golang有支持集合数据结构的计划吗?

python - 词频与词典理解

ios - menuController Action 的 tableView 设置编辑不起作用

ios - 如何在新的 iTunes 连接中为应用内购买创建测试用户?

ios - 如何在iOS中检测触发静音按钮事件

ios - Realm - 对象中的对象列表(Swift 3)

iOS 低功耗蓝牙 (BLE) 未发现 TX 特性