У меня есть массив, который может содержать до 4 значений. Массив всегда будет иметь как минимум 1 значение, а другое 3 может быть равно нулю. Я должен взять элементы внутри массива и присвоить их свойствам класса.Swift iOS -Получить словарь для принятия значения nil
Проблема заключается в том, что я повторяю массив, получаю значения nil, назначаю их свойствам класса, а затем пытаюсь назначить эти свойства nil для моего словаря, я получаю сбой.
Мне нужен словарь, чтобы принимать значения с цветами и игнорировать значения nil. Поэтому у меня есть 2 проблемы.
- цвета из массива, которые существуют придумывают, как ноль в myDict
- Ниль значения в массиве исключения
Как бы идти о фиксации этого?
код:
class ColorClass{
var colorOne:String?
var colorTwo:String?
var colorThree:String?
var colorFour:String?
}
let colorClass = ColorClass()
var randColors: [String?] = []
//In this case I have 2 colors but sometimes randColors may have 1 color or 3 colors or 4 colors. It will always vary
randColors = ["purple","pink"]
for (index,element) in randColors.enumerate(){
switch index {
case 0:
if let elZero = element{
colorClass.colorOne = elZero
}
case 1:
if let elOne = element{
colorClass.colorTwo = elOne
}
case 2:
if let elTwo = element{
colorClass.colorThree = elTwo
}
case 3:
if let elThree = element{
colorClass.colorFour = elThree
}
default:
break
}
}
var myDict = [String:AnyObject]()
myDict.updateValue(colorClass.colorOne!, forKey: "firstKey")
myDict.updateValue(colorClass.colorTwo!, forKey: "secondKey")
myDict.updateValue(colorClass.colorThree!, forKey: "thirdKey")
myDict.updateValue(colorClass.colorFour!, forKey: "fourthKey")
Аварии происходят на:
myDict.updateValue(colorClass.colorThree!, forKey: "thirdKey")
myDict.updateValue(colorClass.colorFour!, forKey: "fourthKey")
Объекты типа '[String: AnyObject] 'не может иметь значения' nil' внутри. Однако '[String: AnyObject?]' Может. Поэтому попробуйте изменить подпись myDict, поэтому он выглядит как «var myDict = [String: AnyObject?]()» ... тогда, если вам это нужно как ниль, вы можете просто написать 'myDict.updateValue (nil, forKey: «yourKey») ' – mutantkeyboard
@ мутантная клавиатура Спасибо за помощь. Я попробовал ваше решение, но оно не сработало. Я изменил объявление dict на var myDict = [String: AnyObject?](). Кроме того, я просто понял, что 2 значения цвета, которые действительно существуют, отображаются как значения nil. –
Значение «nil» в словаре означает, что соответствующий ключ отсутствует. Объявление '[String: AnyObject?]' Нонсенс. – vadian