如何在此字典中插入数据-Swift 4

时间:2018-11-18 12:09:04

标签: swift dictionary

我需要将数据插入此类字典

var dict : Dictionary = [Int: [(TimelinePoint, UIColor, String, String, String?, String?, String?)]]()

对于插入数据,我正在使用这种结构

 dict[dictionaryKey] = ([TimelinePoint(), performance.timelineColor, "12:30", performance.name, "asdf", "nil", "nil"] as? [(TimelinePoint, UIColor, String, String, String?, String?, String?)])

其中dictionaryKey = 1 (integer)  这不起作用,我没有收到任何错误,但字典为空。

但是,这没有问题

let data:[Int: [(TimelinePoint, UIColor, String, String, String?, String?, String?)]] = [0:[(TimelinePoint(), UIColor.green, "12:30", "Lorem \n ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "asdf", "asdf", "Sun")]

有人可以帮助我,哪里出问题了?

2 个答案:

答案 0 :(得分:0)

您可以尝试

 dict[dictionaryKey] = ([(TimelinePoint(), performance.timelineColor, "12:30", performance.name, "asdf", "nil", "nil")] as? [(TimelinePoint, UIColor, String, String, String?, String?, String?)])

在第一种情况下,我认为您缺少大括号“()”来包围您的值。在第二种情况下,您正在这样做,因为它可以工作。

结果,在第一种情况下,您的数据类型不正确。

这可能会暂时解决您的问题。但是,由于将元组用于这种复杂的数据类型,将来会遇到麻烦。因此,请遵循Swift的建议,对于大型数据类型,请使用Struct而不是Tuples

答案 1 :(得分:0)

您的数据类型与您的声明不匹配。您对Dictionary的声明将每个值定义为一个元组数组,但是失败的代码试图将包含数组的元组用作您的值。错了。

您在该行中使用了条件强制转换(as?),并且强制转换失败,因此您的代码将nil分配给字典条目。没有条件强制转换,您将得到一个编译错误。使用条件强制转换,您的代码正在编译,但映射到nil。

您的第二个赋值正确创建了一个由元组数组组成的值,因此可以正常工作。

像这样更改您的第一份作业:

dict[dictionaryKey] = [(TimelinePoint(), performance.timelineColor, "12:30", performance.name, "asdf", nil, nil)] 

顺便说一句,字符串“ nil”与nil不同。如果要表示缺少的值,请使用nil不带引号。

而且,正如其他人所说的那样,将元组用于这样的复杂数据模型也是一个坏主意。而是创建一个结构数组。