2016-11-19 119 views
0

我爲CNContact一個數組,我使用此功能對它們進行排序:字典有可選的關鍵

for contact in self.contacts { 

    var contactName = contact.organizationName 

    let key: String = String(contactName.characters.first).uppercaseString 
    if let arrayForLetter = self.contactDictionary[key] { 
     self.contactDictionary[key]!.append(contact) 
     self.contactDictionary.updateValue(arrayForLetter, forKey: key) 
    } else { 
     self.contactDictionary.updateValue([contact], forKey: key) 
    } 
} 

self.keys = self.contactDictionary.keys.sort() 

哪裏contactDictionary的類型爲:

var contactDictionary: [String: [CNContact]] = [String: [CNContact]]() 
var keys: [String] = [] 

現在,當我看到contactDictionary時它充滿了它的作品,除了鑰匙總是Optional(\"T"\")或其他一些信件當然。但爲什麼它是可選的? forloop的關鍵不是可選的,所以這是怎麼回事?

+1

集合的第一個屬性是可選類型,所以你可能在這裏得到可選的'contactName.characters.first'檢查一次。 –

+0

謝謝你解決了這個問題。 – user1007522

+0

我當然會。前進。 – user1007522

回答

1

firstCollection屬性是可選類型的,所以你得到可選這裏大概contactName.characters.first,如果你把它包使用if letguard將解決您的問題。

if let fc = name.characters.first { 
    let key = String(fc).uppercaseString 
} 
0

嘗試做這樣:

for contact in self.contacts { 
    var contactName = contact.organizationName 

    if let key = String(contactName.characters.first).uppercaseString { 
     if let arrayForLetter = self.contactDictionary[key] { 
      self.contactDictionary[key]!.append(contact) 
      self.contactDictionary.updateValue(arrayForLetter, forKey: key) 
     } else { 
      self.contactDictionary.updateValue([contact], forKey: key) 
     } 
    } 
} 

self.keys = self.contactDictionary.keys.sort()