我需要将数据插入此类字典
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")]
有人可以帮助我,哪里出问题了?
答案 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
不带引号。
而且,正如其他人所说的那样,将元组用于这样的复杂数据模型也是一个坏主意。而是创建一个结构数组。