Swift编译错误位广播要求两个操作数都为指针或都不为指针 [英] Swift Compile Error Bitcast requires both operands to be pointer or neither

查看:177
本文介绍了Swift编译错误位广播要求两个操作数都为指针或都不为指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Xcode6 beta 1中,类似的方法起作用,但是在Xcode6 beta 4中存在错误.修正错误后,我的无错误代码如下

In Xcode6 beta 1 something similar to this worked, however with Xcode6 beta 4 there were errors. After fixing the errors the errorless code I have is below

用于背景:我在这里使用的类实现了 ABPeoplePickerNavigationControllerDelegate ,它使您可以让用户从通讯录中选择一个联系人.我想获得添加到该人的第一封电子邮件.

For Background: The class I'm using here implements ABPeoplePickerNavigationControllerDelegate which allows you the user to select a contact from the address book. I want to get the first email that is added to that person.

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)
}

但是,当我编译时,构建失败:

However when I compile I get Build Failed:

位广播要求两个操作数均为指针,或都不为指针%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错误:发现损坏的函数,编译中止!命令/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)
}

错误缩短为

位广播要求两个操作数均为指针,或都不为指针%79 =将%objc_object *%78广播到%PSs9AnyObject_,!dbg!856存储值类型与指针操作数类型不匹配!存储%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)

}

可以在此处找到完整的答案.

More full answer can be found here.

这篇关于Swift编译错误位广播要求两个操作数都为指针或都不为指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆