Swift Compile Error Bitcast requer que ambos os operandos sejam ponteiros ou nenhum deles
Pergunta
No Xcode6 beta 1 algo semelhante a isso funcionou, porém com o Xcode6 beta 4 houve erros.Depois de corrigir os erros, o código sem erros que tenho está abaixo
Para plano de fundo:A classe que estou usando aqui implementa ABPeoplePickerNavigationControllerDelegate
que permite ao usuário selecionar um contato do catálogo de endereços.Quero receber o primeiro e-mail adicionado a essa pessoa.
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)
}
No entanto, quando compilo, recebo Build Failed:
O bitcast exige que ambos os operando sejam ponteiros ou nem %80 = bitcast %objc_object* %79 a %pss9anyObject_ ,!Store %PSS9anyObject_ %80, %objc_object ** %81, alinhe 4 ,!Store %pss9anyObject_ %80, %objc_object ** %85, alinhe 4 ,! DBG! 864 %objc_object*llvm Erro:Função quebrada encontrada, compilação abortada!Comando /Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift falhou com o código de saída 1
As linhas suspeitas são:
var emailsObj = emails.takeUnretainedValue() as AnyObject
var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)
Quando eu mudo o código para
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)
}
O erro encurta para
O bitcast exige que ambos os operando sejam ponteiros ou nenhum %79 = bitcast %objc_object* %78 a %pSS9anyObject_ ,!Store %PSS9anyObject_ %79, %objc_object ** %80, alinhe 8 ,! DBG! 856 %objc_object*llvm Erro:Função quebrada encontrada, compilação abortada!Comando /Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift falhou com o código de saída 1
Agradecemos antecipadamente por qualquer ajuda
Aarão
Solução
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)
}
Uma resposta mais completa pode ser encontrada aqui.