Bitcast di errore Swift Compile richiede che entrambi gli operandi siano il puntatore o né
Domanda
in XCode6 Beta 1 Qualcosa di simile a questo funzionava, tuttavia con XCode6 Beta 4 c'erano errori. Dopo aver fissato gli errori, il codice senza errori che ho è sotto
per lo sfondo :
La classe che sto usando qui implementa ABPeoplePickerNavigationControllerDelegate
che consente all'utente di selezionare un contatto dalla rubrica. Voglio ottenere la prima email che viene aggiunta a quella 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)
}
.
Tuttavia quando compilo ottengo Build Build:
Bitcast richiede che entrambi gli operandi siano il puntatore o né % 80= Bitcast% objc_object *% 79 a% PSS9anyObject_ ,! DBG! 860 Il tipo di valore memorizzato non corrisponde al tipo di operand del puntatore! Store% PSS9anyObject_% 80,% Objc_object **% 81, Allinea 4 ,! DBG! 860 % OBJC_Object * Tipo di valore memorizzato non corrisponde al tipo di operandi puntatore! Store% PSS9anyObject_% 80,% OBJC_Object **% 85, Allinea 4 ,! DBG! 864 % objc_object * llvm Errore: Funzione rotta trovata, compilation abort! Comando /Applications/xCode6-Beta4.App/Contents/Developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift fallito con codice di uscita 1
Le linee sospette sono:
var emailsObj = emails.takeUnretainedValue() as AnyObject
var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)
.
Quando modifico il codice in
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)
}
.
L'errore si accorcia a
Bitcast richiede che entrambi gli operandi siano il puntatore o né % 79= Bitcast% objc_object *% 78 a% PSS9anyObject_ ,! DBG! 856 Il tipo di valore memorizzato non corrisponde al tipo di operand del puntatore! Store% PSS9anyObject_% 79,% objc_object **% 80, Allinea 8 ,! DBG! 856 % objc_object * llvm Errore: Funzione rotta trovata, compilation abort! Comando /Applications/xCode6-Beta4.App/Contents/Developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift fallito con codice di uscita 1
Grazie in anticipo per qualsiasi aiuto
Aaron
Soluzione
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)
}
.
Più risposta completa può essere trovato qui . .