我有一个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中的键不是可选的,所以这是怎么来的?
答案 0 :(得分:1)
first
Collection
的{{1}}属性属于可选类型,因此,如果您使用contactName.characters.first
或if 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()