Опитвам се да извлека имена на контакти, ето как:
func getContactNames() {
let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as [ABRecord]
for person in people {
contactList.append(ABRecordCopyCompositeName(person).takeRetainedValue() as String)
}
}
Когато всички контакти имат имена, това работи, въпреки че когато има някои контакти без имена, приложението се срива и получавам:
фатална грешка: неочаквано намерена нула при разопаковане на незадължителна стойност
Опитах да използвам ?
така:
let contact2 = (ABRecordCopyCompositeName(person)?.takeRetainedValue() as? String)
if contact2 != nil {
contactList.append(contact2!)
}
Тогава винаги ще получавам nil
.
Някакви идеи какво правя погрешно?
nil
, но бих препоръчал повече проверка в стил Swift дали Optional е нула или не. Направи го така:if let contact2 = (ABRecordCopyCompositeName(person)?.takeRetainedValue() as? String){ contactList.append(contact2) }
- person Juri Noga   schedule 26.11.2015