Ошибка при получении значения из CFArray

Я пытаюсь получить контакты из адресной книги. Мой код работает правильно в Objective C, но когда я преобразовал его в быстрый, я получаю сообщение об ошибке

Не удалось преобразовать значение типа "Swift.UnsafePointer‹()>" в "Swift.AnyObject"

Ниже мой код

    var errorRef: Unmanaged<CFError>? = nil
    let addressBook: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, &errorRef).takeRetainedValue()
    let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray //as [ABRecordRef]
    let numberOfPeople = ABAddressBookGetPersonCount(addressBook)

    for (var i=0; i < numberOfPeople; i++){
        runOnMainQueueWithoutDeadlocking({ () -> () in
            ProgressHUD.show("Reading Contact \(i) out of \(numberOfPeople)")
        })

        let aPerson = CFArrayGetValueAtIndex(allPeople, i) as! ABRecordRef     //Error here
    }

Как преобразовать запись в ABRecordRef. Пожалуйста помоги


person Ankita Shah    schedule 10.12.2015    source источник


Ответы (1)


Вы не можете принудительно привести UnsafePointer<Void> к типу. Вы должны сначала преобразовать этот указатель void в UnsafePointer<Type>, а затем взять его память:

let aPerson = UnsafePointer<ABRecordRef>(CFArrayGetValueAtIndex(allPeople, i)).memory

К вашему сведению... ABAddressBook устарело в iOS 9. Для нового кода, предназначенного для этой ОС, используйте вместо него CNContactStore.

person Code Different    schedule 10.12.2015