gpt4 book ai didi

ios - Swift 等效于 (__bridge NSArray*)

转载 作者:可可西里 更新时间:2023-11-01 00:24:27 25 4
gpt4 key购买 nike

我正在尝试使用 swift 获取具有特定名称的联系人列表。我有以下代码:

let owner = owners[indexPath.row];

var addressBook = ABAddressBookCreateWithOptions(nil, nil)
var addressBookRef: ABAddressBookRef = Unmanaged<NSObject>.fromOpaque(addressBook.toOpaque()).takeUnretainedValue()

let ownerName: NSString = owner["name"]! as NSString

let allContacts = ABAddressBookCopyPeopleWithName(addressBookRef, ownerName)

println("All Contacts: \(allContacts)")

显然,allContacts 的值为 Swift.Unmanaged。我希望 allContacts 是一个 NSArray

在我遵循的教程中,allContacts 通过将 (__bridge NSArray*) 添加到 ABAddressBookCopyPeopleWithName(addressBookRef) 桥接到 NSArray , ownerName).

可能导致问题的原因是什么?

最佳答案

  1. 您正在对 UnmanagedOpaque 类型进行不必要的包装/解包。你的线路:

    var addressBookRef: ABAddressBookRef = Unmanaged<NSObject>.fromOpaque(addressBook.toOpaque()).takeUnretainedValue()

    相当于:

    var addressBookRef = addressBook.takeUnretainedValue()

    (此外,您应该使用 let 除非您想为该变量分配另一个值,这似乎不太可能。优化器会感谢您。)

  2. 在将参数传递给 AddressBook API 时,您也不需要强制转换为 Foundation 类型...但我无法让 ABAddressBookCopyPeopleWithName 在我的测试中返回一个非空数组,即使使用 ObjC,也很难说。

  3. 如果你只想打印数组,你只需要这个(由于上述问题,使用 ABAddressBookCopyArrayOfAllPeople 而不是,但返回数组的用法是相同的):

    let addressBook: ABAddressBook = 
    ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
    let allContacts =
    ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue()
    println("All Contacts: \(allContacts)")

    (大概在获取 addressBook 和使用它之间的某个时间,您要么检查 ABAddressBookGetAuthorizationStatus() 要么调用 ABAddressBookRequestAccessWithCompletion,对吗?)

  4. 如果您想使用数组中的 ABRecord 值,您需要进行一些转换。 CoreFoundation 类型桥接到 Foundation 类型,Foundation 数组桥接到 Swift 数组,但它不会自动从 CF 一直桥接到 Swift。

    for contact in ((allContacts as NSArray) as [ABRecord]) {
    let name = ABRecordCopyCompositeName(contact).takeRetainedValue()
    println(name)
    }

    (我在 for 语句中放置了括号以显示操作的层次结构,但实际上您的代码中不需要它们。)

关于ios - Swift 等效于 (__bridge NSArray*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com