字典有可选键

Dictionary has optional key

我有一个 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中的key不是可选的,这是怎么来的?

尝试这样做:

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()

first 属性 of Collection 是可选类型,所以你可能在这里 contactName.characters.first 获得可选类型,如果你使用 if let 或者guard 将解决您的问题。

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