Swift 컴파일 오류 비트 캐스트는 두 피연산자가 포인터가되거나 둘 다 필요하지 않습니다.
문제
Xcode6 베타 1이 작업과 비슷한 것으로 나타나면 Xcode6 베타 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)
}
.
그러나 컴파일 할 때 빌드가 실패했습니다.
비트 캐스트는 두 개의 피연산자가 포인터 또는 어느 것도 없어야합니다. % 80= 비트 캐스트 % OBJC_OBJECT * % 79 % PSS9ANYOBJECT_,! DBG! 860 저장된 값 유형이 포인터 피연산자 유형과 일치하지 않습니다! 저장 % PSS9ANYOBJECT_ % 80, % OBJC_OBJECT ** % 81, ALIGN 4, ALIZ! 860 % OBJC_OBJECT * 저장된 값 유형이 포인터 피연산자 유형과 일치하지 않습니다! 저장 % PSS9ANYOBJECT_ % 80, % OBJC_OBJECT ** % 85, ALIGN 4, ALIZ! 864 % OBJC_OBJECT * LLVM 오류 : 깨진 기능이 발견 된 컴파일이 중단되었습니다! 명령 / applications/xcode6-beta4.app/contents/developer/toolchains/xcodeDefault.xctoolchain/usr/bin/usspt
로 실패했습니다.의심스러운 선은 다음과 같습니다.
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)
}
.
오류가 짧아졌습니다
비트 캐스트는 두 개의 피연산자가 포인터 또는 어느 것도 없어야합니다. % 79= 비트 캐스트 % OBJC_OBJECT * % 78 % PSS9ANYOBJECT_, DBG! 856 저장된 값 유형이 포인터 피연산자 유형과 일치하지 않습니다! 저장 % PSS9ANYOBJECT_ % 79, % OBJC_OBJECT ** % 80, 8, ALIGN 8,! DBG! 856 % OBJC_OBJECT * LLVM 오류 : 깨진 기능이 발견 된 컴파일이 중단되었습니다! 명령 / applications/xcode6-beta4.app/contents/developer/toolchains/xcodeDefault.xctoolchain/usr/bin/usspt
로 실패했습니다.도움말
에 미리 감사드립니다.아론
해결책
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)
}
.
더 많은 완전한 답변을 찾을 수 있습니다 여기 ./ P>