Van*_*oor 14 unmanaged abrecordcopyvalue swift
我需要从AddressBook框架转换此函数的返回值:
ABRecordCopyValue(nil, kABPersonPhoneProperty)
Run Code Online (Sandbox Code Playgroud)
到ABMultiValueRef类型的值
此功能目前标记为:
func ABRecordCopyValue(record: ABRecordRef!, property: ABPropertyID) -> Unmanaged<AnyObject>!
Run Code Online (Sandbox Code Playgroud)
所以我可以将它转换为Unmanaged,如下所示:
ABRecordCopyValue(person, kABPersonPhoneProperty) as Unmanaged<ABMultiValueRef>
Run Code Online (Sandbox Code Playgroud)
但是,我怎样才能将它作为ABMultiValueRef,以便我可以将它传递给这个函数?
func ABMultiValueGetIndexForIdentifier(multiValue: ABMultiValueRef!, identifier: ABMultiValueIdentifier) -> CFIndex
Run Code Online (Sandbox Code Playgroud)
我这样做了:
let managedPhones = Unmanaged.fromOpaque(phones.toOpaque()).takeUnretainedValue() as ABMultiValueRef
Run Code Online (Sandbox Code Playgroud)
我一直收到这个编译错误:
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
Run Code Online (Sandbox Code Playgroud)
Van*_*oor 25
我找到了解决方案:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4408 次 |
最近记录: |