يتطلب Swift Compile Error Bitcast أن يكون كلا المعاملين مؤشرًا أو لا يكونا كذلك
سؤال
في الإصدار التجريبي الأول من Xcode6، نجح شيء مشابه، ولكن مع الإصدار التجريبي الرابع من Xcode6 كانت هناك أخطاء.بعد إصلاح الأخطاء، يوجد الرمز الخالي من الأخطاء أدناه
للخلفية:يتم تنفيذ الفصل الذي أستخدمه هنا 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)
}
ولكن عندما أقوم بالتجميع أحصل على فشل البناء:
يتطلب Bitcast أن يكون كل من المعاملات مؤشرًا أو لا ٪ 80 = bitcast ٪ objc_object* ٪ 79 إلى ٪ pss9anyobject_ ،! dbg! 860 نوع القيمة المخزنة لا يتطابق مع نوع معامل المؤشر!Store ٪ PSS9AnyObject_ ٪ 80 ، ٪ OBJC_OBJECT ** ٪ 81 ، محاذاة 4 ،! DBG! 860 ٪ OBJC_OBJECT*نوع القيمة المخزنة لا يتطابق مع نوع معامل المؤشر!store ٪ pss9anyobject_ ٪ 80 ، ٪ objc_object ** ٪ 85 ، محاذاة 4 ،! dbg! 864 ٪ objc_object*llvm خطأ:تم العثور على وظيفة معطلة، وتم إحباط التجميع!فشل الأمر /Applications/Xcode6-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)
}
الخطأ يختصر إلى
يتطلب Bitcast أن يكون كل من المعاملات مؤشرًا أو لا ٪ 79 = bitcast ٪ objc_object* ٪ 78 إلى ٪ pss9anyobject_ ،! dbg! 856 نوع القيمة المخزنة لا يتطابق مع نوع معامل المؤشر!store ٪ pss9anyobject_ ٪ 79 ، ٪ objc_object ** ٪ 80 ، محاذاة 8 ،! dbg! 856 ٪ objc_object*llvm خطأ:تم العثور على وظيفة معطلة، وتم إحباط التجميع!فشل الأمر /Applications/Xcode6-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)
}
يمكن العثور على المزيد من الإجابة الكاملة هنا.