字典有可选键

时间:2016-11-19 10:46:16

标签: ios swift3 cncontact

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

2 个答案:

答案 0 :(得分:1)

first Collection的{​​{1}}属性属于可选类型,因此,如果您使用contactName.characters.firstif let对其进行包装,则可能会在guard处获取可选项解决了你的问题。

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

答案 1 :(得分: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()