Reputation: 8118
I'm having a array of CNContact
and I sort them with this function:
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()
Where contactDictionary is of type:
var contactDictionary: [String: [CNContact]] = [String: [CNContact]]()
var keys: [String] = []
Now when I see the contactDictionary when it's filled it works except the key always Optional(\"T"\")
or some other letter of course. But why is it optional? The key in the forloop is not optional so how does this come?
Upvotes: 0
Views: 107
Reputation: 72460
first
property of Collection
is of optional type, So you are getting optional probably here contactName.characters.first
, if you wrapped it using if let
or guard
will solved your issue.
if let fc = name.characters.first {
let key = String(fc).uppercaseString
}
Upvotes: 1
Reputation: 17414
Try to do it this way:
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()
Upvotes: 0