Erreur de compilation SWIFT Bitcast nécessite que les deux opérandes soient du pointeur ou non
Question
dans xcode6 bêta 1 quelque chose de similaire à cela a fonctionné, cependant avec XCode6 Beta 4, il y avait des erreurs. Après avoir corrigé les erreurs, le code sans erreur que j'ai est inférieur
pour fond :
La classe que j'utilise ici implémente ABPeoplePickerNavigationControllerDelegate
qui vous permet à l'utilisateur de sélectionner un contact dans le carnet d'adresses. Je veux obtenir le premier email ajouté à cette personne.
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)
}
Cependant, lorsque je compile, je reçois la construction a échoué:
Bitcast nécessite que les deux opérandes soient du pointeur ou non % 80= Bitcast% Objc_Object *% 79 à% PSS9AnyObject_ ,! DBG! 860 Type de valeur stockée ne correspond pas à l'opérande de pointeur Type! Store% PSS9AnyObject_% 80,% Objc_Object **% 81, Align 4 ,! DBG! 860 % objc_object * Type de valeur stockée ne correspond pas au type de pointeur de l'opérande! Store% PSS9AnyObject_% 80,% objc_Object **% 85, Align 4 ,! DBG! 864 % Erreur Objc_Object * LLVM: fonction cassée trouvée, compilation avortée! Commande /applications/xcode6-beta4.app/Contents/Developer/Toolchains/xcodedefault.xcctoolchain/usr/bin/swift a échoué avec le code de sortie 1
Les lignes suspectes sont:
var emailsObj = emails.takeUnretainedValue() as AnyObject
var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)
Quand je change le code sur
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'erreur raccourcit à
Bitcast nécessite que les deux opérandes soient du pointeur ou non % 79= Bitcast% objc_Object *% 78 à% PSS9AnyObject_ ,! DBG! 856 Type de valeur stockée ne correspond pas à l'opérande de pointeur Type! Store% PSS9AnyObject_% 79,% Objc_Object **% 80, Align 8 ,! DBG! 856 % Erreur Objc_Object * LLVM: fonction cassée trouvée, compilation avortée! Commande /applications/xcode6-beta4.app/Contents/Developer/Toolchains/xcodedefault.xcctoolchain/usr/bin/swift a échoué avec le code de sortie 1
Merci d'avance pour toute aide
AARON
La solution
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)
}
La réponse plus complète peut être trouvée ici .