我需要从AddressBook框架转换此函数的返回值:
ABRecordcopyValue(nil,kABPersonPhoneProperty)

值为ABMultiValueRef类型

此功能当前标记为:

func ABRecordcopyValue(record: ABRecordRef!,property: ABPropertyID) -> Unmanaged<AnyObject>!

所以我可以把它转换为非管理像这样:

ABRecordcopyValue(person,kABPersonPhoneProperty) as Unmanaged<ABMultiValueRef>

但是如何才能将其作为ABMultiValueRef获取,以便我可以将其传递给此函数?

func ABMultiValueGetIndexForIdentifier(multiValue: ABMultiValueRef!,identifier: ABMultiValueIdentifier) -> CFIndex

我做到了

let managedPhones = Unmanaged.fromOpaque(phones.toOpaque()).takeUnretainedValue() as ABMultiValueRef

我不断得到这个编译器错误:

Bitcast requires both operands to be pointer or neither
%89 = bitcast %objc_object* %88 to %PSs9AnyObject_,!dbg !325
LLVM ERROR: broken function found,compilation aborted!
Command /Applications/Xcode6-Beta3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift Failed with exit code 1
我找到了解决方案:
func peoplePickerNavigationController(
  peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    /* Do we kNow which picker this is? */
    if peoplePicker != personPicker{
      return
    }

    /* Get all the phone numbers this user has */
    let unmanagedPhones = ABRecordcopyValue(person,kABPersonPhoneProperty)
    let phones: ABMultiValueRef =
    Unmanaged.fromOpaque(unmanagedPhones.toOpaque()).takeUnretainedValue()
      as NSObject as ABMultiValueRef

    let countOfPhones = ABMultiValueGetCount(phones)

    for index in 0..<countOfPhones{
      let unmanagedPhone = ABMultiValuecopyValueAtIndex(phones,index)
      let phone: String = Unmanaged.fromOpaque(
        unmanagedPhone.toOpaque()).takeUnretainedValue() as NSObject as String

      println(phone)
    }  
}

Swift(iOS 8 SDK)将Unmanaged转换为ABMultiValueRef的更多相关文章

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. ios – 来自UIAlertController的self.navigationController?.popViewControllerAnimated

    我是新手,但我想我已经掌握了它.这让我的进步很难过.我想要做的是当我们无法找到他的查询的相关数据时向用户抛出错误消息,然后继续将他带回到之前的ViewController.但是,我在这方面遇到了麻烦.在我添加操作的行上,我收到以下错误:’UIViewController?’不是Void的子类型我该怎么做呢?

  3. ios – 如何从Swift中的Closure返回值?

    ).更改实现以使用存储调用值的成员变量.

  4. ios – 将两个字符串转换为一组布尔值的快速方法是什么?

    我有一个长字符串,我想转换为一个布尔值数组.而且它需要很多次,很快.我天真的尝试是这样的:但这比我想要的要慢很多.我的剖析告诉我,地图是减速的地方,但我不知道我能做多么简单.我觉得如果没有Swift’s/ObjC的开销,这样做会很快.在C中,我认为这是一个简单的循环,其中一个字节的内存与一个常量进行比较,但我不知道我应该看的是什么函数或语法.有更好的办法吗?

  5. Swift中方法的多面性

    在继续之前,我需要澄清Swift中方法和函数之间的不同,因为在本文中我们将使用这两个术语。按照Apple的SwiftProgrammingLanguageBook里面的方法定义:方法是与某些特定类型相关联的函数。可选类型比Objective-C中的nil指针更加安全也更具表现力,它是Swift许多强大特性的重要组成部分。作为参数的函数在Swift中,函数可以被用来当做变量传递。华丽的返回类型在Swift中,函数的返回类型和返回值相较于Objective-C而言更加复杂,尤其是引入可选和多个返回类型。

  6. Swift函数返回值

    函数的返回值有三种类型:单一返回值,多返回值,无返回值无返回值函数:示例:func函数名{语句}func函数名->(){语句}func函数名->Void{语句}多返回值函数:两种方式实现:1、参数声明为引用类型传递2、将返回定义为元组示例:1、引用类型参数传递funcChangeInt{value1=55value2=1.23}varval1=0varval2=0.0changeInt2、元组类型示例:funcchangeInt()->{return}letvalue=changeInt()println

  7. swift语言学习-8. 函数

    swift中申明函数使用的关键字是func。无参数作为一个函数,肯定是有无参的情况的,即没有参数输入,swift中的函数无参数输入和其他语言一样,留空就好了。()"hello"//调用并打印函数())//输出:hello无返回值swift中参数的返回值的类型是通过->返回值这种形式来书写的,那一个函数没返回值咋搞呢?就是说swift会自动给有默认值的参数,加上一个外部参数名,和它自己的内参名字一样,就像使用了#效果一样,不用你额外写。

  8. Swift教程14-func函数,函数类型_对比Oc

    Swift的函数和函数类型是非常重要的内容.而且Swift中也把函数的形式和方法的形式,定义的完全一致;只不过,函数不是在类中.1.函数的定义func函数名(参数列表)[->返回值类型]{//函数体}解释:func是关键字,是必须写上的前缀,代表它是一个函数或方法;函数名:遵从标识符的规则形参列表,可以为空,也可以很多;例如str:String,a:Int,和声明变量的方法类似->后面跟的是返回值

  9. swift之函数

    Swift的统一的功能语法足够灵活的,可表达任何东西,无论是不带参数名称的简单的样式函数,还是带本地和外部参数名称的复杂的Objective-C样式方法。Swift中的每个函数都有一个类型,包括函数的参数类型和返回类型。为了简化这个函数的主体,可把消息创建和return语句合并成一行:函数的形参和返回值在swift中,函数的形参和返回值是非常具有灵活性的。第二个函数printWithoutCounting,调用的第一个函数,但忽略它的返回值。

  10. swift之Optional Chaining

    自判断链接是一种可以请求和调用属性、方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空。Residence具有一个Int类型的numberOfRooms,其值为1。强制拆包获得这个人residence属性numberOfRooms属性值,将会引发运行时错误,因为这时没有可以供拆包的residence值。当john.residence不是nil时,会运行通过,且会将roomCount设置为一个int类型的合理值。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部