2016-11-18 21 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操作符並使用字典的新默認值來避免該問題。 –