迭代字典数组以获取所有键

Kin*_*Tim 1 ios swift

我有一个在对象中[[String : AnyObject]]调用的字典数组- 每个字典都保存一个作为 String 的名称和一个作为 AnyObject 的 id。roomsUser

我想用名称填充表视图,因此我尝试循环数组并从字典中获取字符串值。

        if let roomDict = myUser.rooms as? [[String : AnyObject]] {
            for (roomNames, _) in roomDict {
                cell.textLabel?.text = roomNames
            }
        }
Run Code Online (Sandbox Code Playgroud)

我相对较新,从我在教程中看到的内容以及循环字典时的情况来看,您使用下划线来指定您不需要第二个值。因此,只需获取所有第一个值(在本例中为名称),并将它们设置为roomNames变量即可。

然而我在这里很困惑,因为我不是循环字典,而是循环字典数组。所以我不知道该怎么做。我进行了搜索,看到的结果通常都是关于 JSON 的,但这里的情况并非如此。我怎样才能做到这一点?

谢谢你的帮助!

Pau*_*w11 6

首先,你的字典结构不理想。您的字典不应将键作为房间名称,将值作为标识符,而应具有已知的键名称和变量值。键不应该是字典中的“数据”。

所以,而不是

["room1":1] 
Run Code Online (Sandbox Code Playgroud)

如果是的话就更好了

["roomName":"room1", "roomID":1]
Run Code Online (Sandbox Code Playgroud)

但是,根据您当前的结构,假设每个字典只有一个键,即房间名称,您可以通过以下方式获取名称:

if let rooms = myUser.rooms as? [[String : AnyObject]] {
   roomNames = rooms.map({ $0.keys.first!})
}
Run Code Online (Sandbox Code Playgroud)

如果您使用我建议的更好的结构,那么它将是

if let rooms = myUser.rooms as? [[String : AnyObject]] {
   roomNames = rooms.map({ $0["roomName"] as? String ?? ""})
}
Run Code Online (Sandbox Code Playgroud)