Как вставить данные в этот словарь - Swift 4 - PullRequest
0 голосов
/ 18 ноября 2018

Мне нужно вставить данные в этот тип словаря

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 голосов
/ 18 ноября 2018

Ваш тип данных не соответствует вашему объявлению. Ваша декларация для словаря определяет каждое значение как массив кортежей, но ваш неудачный код пытается использовать кортеж, содержащий массив в качестве вашего значения. Это неправильно.

Вы используете условное приведение (as?) в этой строке, и приведение завершается неудачно, поэтому ваш код присваивает ноль записи словаря. Без условного приведения вы получите ошибку компиляции. С условным приведением ваш код компилируется, но отображается на ноль.

Ваше второе назначение правильно создает значение, которое является массивом кортежей, поэтому оно работает.

Измените свое первое назначение следующим образом:

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

Кроме того, строка "nil" - это не то же самое, что ноль. Если вы хотите представить пропущенное значение, используйте nil без кавычек.

Кроме того, как уже говорили другие, использование кортежей для сложной модели данных, как это, является плохой идеей. Вместо этого создайте массив структур.

0 голосов
/ 18 ноября 2018

Вы можете попробовать это

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

Я думаю, что вам не хватает маленьких скобок "()", чтобы окружить ваши значения в первом случае.Вы делаете это во втором случае, из-за которого это работает.

В результате ваш тип данных в первом случае неверен.

Это может временно решить вашу проблему.Однако в будущем у вас будут проблемы из-за использования кортежа для такого сложного типа данных.Поэтому следуйте рекомендациям Swift и используйте Struct вместо Tuples для больших типов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...