Bitcast Bitcast Compiele Swift требует, чтобы оба операнда были указатель или ни один

StackOverflow https://stackoverflow.com//questions/25089448

  •  02-01-2020
  •  | 
  •  

Вопрос

в Xcode6 Beta 1 что-то похожее на это сработало, однако с XCode6 Beta 4 были ошибки. После исправления ошибок ошибки у меня есть беспроблемный код, ниже

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

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var emails = ABRecordCopyValue(person, kABPersonEmailProperty)
    var emailsObj = emails.takeUnretainedValue() as AnyObject
    var index = 0 as CFIndex
    var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)

    println(emailAddress)
}
.

Однако, когда я компилирую, я получаю неудачу, не удалось:

Bitcast требует, оба операнда будут указатель или ни один % 80= Bitcast% OBJC_Object *% 79 до% PSS9anyObject_,! DBG! 860 Тип хранимого значения не соответствует типу операнда указателя! Магазин% PSS9anyObject_% 80,% objc_object **% 81, Align 4,! DBG! 860 % objc_object * Тип хранимого значения не соответствует типу операнда указателя! Store% PSS9anyObject_% 80,% objc_object **% 85, Align 4,! DBG! 864 % objc_object * llvm Ошибка: Сломанная функция найдена, Компиляция прервана! Команда /applications/xCode6-beta4.app/contents/developer/toolechains/xcodedefault.xctoolchain/usr/bin/swift не удалось с помощью кода выхода 1

Подозреваемые линии:

var emailsObj = emails.takeUnretainedValue() as AnyObject
var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)
.

Когда я изменим код на

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var emails = ABRecordCopyValue(person, kABPersonEmailProperty)
    var emailsObj:AnyObject? = emails.takeRetainedValue() as AnyObject
    var index = 0 as CFIndex
    var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)

    println(emailAddress)
}
.

Ошибка сокращения для

Bitcast требует, оба операнда будут указатель или ни один % 79= Bitcast% OBJC_Object *% 78 до% PSS9anyObject_,! DBG! 856 Тип хранимого значения не соответствует типу операнда указателя! Store% PSS9anyObject_% 79,% objc_object * 80, Выровняйте 8,! DBG! 856 % objc_object * llvm Ошибка: Сломанная функция найдена, Компиляция прервана! Команда /applications/xCode6-beta4.app/contents/developer/toolechains/xcodedefault.xctoolchain/usr/bin/swift не удалось с помощью кода выхода 1

заранее спасибо за любую помощь

Aaron

Это было полезно?

Решение

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var unmanagedEmails = ABRecordCopyValue(person, kABPersonEmailProperty)
    let emailObj: ABMultiValueRef = Unmanaged.fromOpaque(unmanagedEmails.toOpaque()).takeUnretainedValue() as NSObject as ABMultiValueRef

    var index = 0 as CFIndex

    var unmanagedEmail = ABMultiValueCopyValueAtIndex(emailObj, index)
    var emailAddress:String = Unmanaged.fromOpaque(unmanagedEmail.toOpaque()).takeUnretainedValue() as NSObject as String

    println(emailAddress)

}
.

Более полный ответ можно найти здесь . .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top