Swiftコンパイルエラービットキャストでは、両方のオペランドがポインタまたはどちらでもない
質問
Xcode6 Beta 1では、このうちに似たものがXcode6 Beta 4では、エラーがありました。エラーを修正した後、私が持っているエラーなしコードは
を下回っています 背景:
ここで使用しているクラスはABPeoplePickerNavigationControllerDelegate
を実装しています。これにより、ユーザーがアドレス帳から連絡先を選択できます。私はその人に追加された最初のEメールを取得したいです。
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、整列4、!DBG!860 %objc_object *格納値タイプがポインタオペランドタイプと一致しません! 保存%PSS9AnyObject_%80、%objc_object **%85、整列4、!DBG!864 %objc_object * LLVMエラー:壊れた関数が見つかりました、コンパイルが中止されました! command / applications / code6-beta4.app/contents/developer/toolchains/xcodeDefault.xctoolchain/usr/bin/swiftが終了コード1
疑わしい線は次のとおりです。
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、!DBG!856 %objc_object * LLVMエラー:壊れた関数が見つかりました、コンパイルが中止されました! command / applications / code6-beta4.app/contents/developer/toolchains/xcodeDefault.xctoolchain/usr/bin/swiftが終了コード1
あらゆる助けを受けてありがとう
アーロン
解決
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)
}
.