2015-09-09 2 views
10

Теперь я использую этот код, чтобы извлечь контакты из моего телефона:Как получить полное имя Контактов в Swift

var addressBookReff: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue() 
    let people:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBookReff).takeRetainedValue() 
    for person in people{ 
     if let name:String = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as? String { 
      let numbers:ABMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() 
      if let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String { 
       self.arrOfDictContacts.addObject(["\(name)":"\(number)"]) 
      } 
     } 
    } 

Здесь я использую kABPersonFirstNameProperty получить только первое имя.

Я хочу получить полное имя контактов !!!

Если я использую, kABPersonCompositeNameFormatFirstNameFirst тогда я получаю сообщение об ошибке, как Int is not convertible toABPropertyId

пардон Если этот вопрос прост и есть много ответов, я мог бы найти какой-либо из них работает для меня, как я не хочу вызвать дополнительную функцию.

Так как я могу получить полное имя и добавить его в словарь arrOfDictContacts?

ответ

21

В API AddressBook, вы можете получить полное/композитное имя со следующим кодом:

let name = ABRecordCopyCompositeName(person).takeRetainedValue() 

В Контактах API (для прошивки 9+), вы можете использовать этот код:

let name: String? = CNContactFormatter.stringFromContact(contact, style: .FullName) 
+0

Что такое «запись» здесь? – AAA

+0

@AAA в вашем коде выше, это будет «человек». – erdekhayser

+0

да, я отредактировал ваш ответ, и он работает :) – AAA

Смежные вопросы