يتطلب Swift Compile Error Bitcast أن يكون كلا المعاملين مؤشرًا أو لا يكونا كذلك

StackOverflow https://stackoverflow.com//questions/25089448

  •  02-01-2020
  •  | 
  •  

سؤال

في الإصدار التجريبي الأول من 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)

}

يمكن العثور على المزيد من الإجابة الكاملة هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top