Error de compilación SWIFT BITCAST requiere que ambos operandos sean punteros o tampoco

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

  •  02-01-2020
  •  | 
  •  

Pregunta

en xcode6 beta 1 Algo similar a esto funcionó, sin embargo, con Xcode6 beta 4 había errores. Después de fijar los errores, el código sin errores que tengo está debajo

para el fondo : La clase que estoy usando aquí implementa ABPeoplePickerNavigationControllerDelegate, que le permite al usuario seleccionar un contacto desde la libreta de direcciones. Quiero obtener el primer correo electrónico que se agrega a esa persona.

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)
}

Sin embargo, cuando compile, obtengo que la construcción falló:

bitcast requiere que ambos operandos sean punteros o tampoco % 80= bitcast% objc_object *% 79 a% pss9anyobject_,! Dbg! 860 ¡El tipo de valor almacenado no coincide con el tipo de operando del puntero! Tienda% PSS9AnyObject_% 80,% objc_object **% 81, alinee 4, ¡DBG! 860 % objc_object * Tipo de valor almacenado ¿No coincide con el tipo de operando de puntero! Tienda% PSS9AnyObject_% 80,% objc_object **% 85, alinee 4,! DBG! 864 % objc_object * llvm Error: Función rota encontrada, compilación abortada! Comando /applications/xcode6-beta4.app/contents/developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift falló con el código de salida 1

Las líneas sospechosas son:

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

cuando cambio el código a

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)
}

El error acorta a

bitcast requiere que ambos operandos sean punteros o tampoco % 79= bitcast% objc_object *% 78 a% pss9anyobject_,! Dbg! 856 ¡El tipo de valor almacenado no coincide con el tipo de operando del puntero! Tienda% PSS9AnyObject_% 79,% objc_object **% 80, alinee 8, ¡DBG! 856 % objc_object * llvm Error: Función rota encontrada, compilación abortada! Comando /applications/xcode6-beta4.app/contents/developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift falló con el código de salida 1

Gracias de antemano por cualquier ayuda

Aaron

¿Fue útil?

Solución

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)

}

Se puede encontrar más respuesta completa aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top