2016-11-18 52 views
1

我有一个最多可容纳4个值的数组。该数组将始终有至少1个值,但其他3个可能为零。我必须将数组内的元素分配给类属性。Swift iOS -Get字典接受零值

问题是我遍历数组后,获取nil值,将它们分配给类属性,然后尝试将这些零属性分配给我的字典,我得到一个崩溃。

我需要字典接受带颜色的值并忽略零值。所以我有两个问题。

  1. 来自的确存在数组中的颜色上来的零在myDict
  2. 数组中的零值是例外

我如何去解决这个?

代码:

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") 
+0

对象'[字符串:AnyObject] '不能在里面有任何'nil'值。但是'[String:AnyObject?]'可以。因此,请尝试更改myDict的签名,使其看起来像'var myDict = [String:AnyObject?]()'...那么如果您需要它为零,则可以简单地编写'myDict.updateValue(nil,forKey: “yourKey”)' – mutantkeyboard

+0

@突变键盘感谢您的帮助。我试过你的解决方案,但它没有奏效。我将dict声明更改为var myDict = [String:AnyObject?]()。另外,我刚刚意识到实际存在的2个颜色值显示为零值。 –

+0

字典中的“nil”值意味着相应的密钥丢失。一个声明'[String:AnyObject?]'是无稽之谈。 – vadian

回答

2

使用if let忽略nil值同时加入/字典中的更新值。崩溃的

if let clrThree = colorClass.colorThree { 
    myDict.updateValue(clrThree, forKey: "thirdKey") 
} 

if let clrFour = colorClass.colorFour { 
    myDict.updateValue(clrFour, forKey: "fourthKey") 
} 

原因是, 您使用!colorClass.colorFour即要用作colorClass.colorFour!之后。

当迅速找到该变量作为零的值,并尝试 强行解开它的应用程序会崩溃意外地发现 零而展开型的

+0

谢谢。我试图把它放在我的switch语句中,但是我得到所有nil值,即使对于像这样的正确的颜色 - case 0: if elZero = someClass.propertyOne {elzero,forKey:“firstKey”) }和壳体3: 如果让elThree = someClass.propertyFour { myDict.updateValue(elThree,forKey: “fourthKey”) }产生让colorOne = someClass.propertyOne(零值) 让colorThree = someClass.propertyThree(NI值) 。我没有崩溃,但都是零值和colorOne不应该为 –

+0

好的答案。其他两个选项包括使用nil coalesce操作符并使用字典的新默认值来避免该问题。 –