如何将数据插入此词典-Swift 4

如何将数据插入此词典-Swift 4,swift,dictionary,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"]

我需要在这类字典中插入数据

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(整数)
这不起作用,我没有得到任何错误,但字典是空的

然而,这项工作没有任何问题

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")]
谁能帮我一下,哪里出了问题?

你可以试试这个

 dict[dictionaryKey] = ([(TimelinePoint(), performance.timelineColor, "12:30", performance.name, "asdf", "nil", "nil")] as? [(TimelinePoint, UIColor, String, String, String?, String?, String?)])
我认为在第一种情况下,您缺少围绕您的值的小括号“()”。在第二种情况下,您这样做是因为它是有效的

因此,第一种情况下的数据类型不正确


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

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

在该行中使用条件转换(
as?
),转换失败,因此代码将nil分配给字典条目。如果没有条件强制转换,则会出现编译错误。使用条件强制转换,您的代码正在编译,但映射为nil

第二个赋值正确地创建了一个元组数组值,因此它可以工作

按以下方式更改您的第一个作业:

dict[dictionaryKey] = [(TimelinePoint(), performance.timelineColor, "12:30", performance.name, "asdf", nil, nil)] 
另外,字符串“nil”与nil不是一回事。如果要表示缺少的值,请使用不带引号的
nil


另外,正如其他人所说,对这样的复杂数据模型使用元组是一个坏主意。改为创建一个结构数组。

Hello。我有两个建议。1) 使用int作为字典的键感觉应该使用数组。2) 你肯定应该使用结构而不是元组来存储这些值。至于你当前的问题:你的字典值是元组数组,而不是数组元组。你选错了类型,它搞错了。//但实际上,这里应该使用结构,而不是元组。