相关疑难解决方法(0)

如何在Swift中获取CNContact电话号码作为字符串?

我正在尝试检索所有联系人的姓名和电话号码,并在iOS中使用Swift将它们放入数组中.我做到了这一点:

func findContacts() -> [CNContact] {

    marrContactsNumber.removeAllObjects()
    marrContactsName.removeAllObjects()

    let store = CNContactStore()

    let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]

    let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)

    var contacts = [CNContact]()

    do {
        try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
            contacts.append(contact)

            self.marrContactsName.addObject(contact.givenName + " " + contact.familyName)

            self.marrContactsNumber.addObject(contact.phoneNumbers)

            print(contact.phoneNumbers)
    }
    catch let error as NSError {
        print(error.localizedDescription)
    }

    print(marrContactsName.count)
    print(marrContactsNumber.count)

    return contacts
}
Run Code Online (Sandbox Code Playgroud)

完成后,marrContactsName将完全按预期包含所有联系人姓名的数组.即"John Doe".但是,marrContactsNumber返回一个值数组,如

[<CNLabeledValue: 0x158a19950: identifier=F831DC7E-5896-420F-AE46-489F6C14DA6E,
label=_$!<Work>!$_, value=<CNPhoneNumber: 0x158a19640: countryCode=us, digits=6751420000>>,
<CNLabeledValue: 0x158a19a80: identifier=ECD66568-C6DD-441D-9448-BDEDDE9A68E1, …
Run Code Online (Sandbox Code Playgroud)

contacts addressbook ios swift ios9

29
推荐指数
3
解决办法
3万
查看次数

Swift嵌套过滤器优化?

我试图在Swift中做一些使用KVC在Objective-C中很容易做到的事情.iOS9中添加的新Contacts框架在大多数情况下比旧的AddressBook API更容易使用.但通过手机号码找到联系人似乎很困难.提供查找联系人的谓词仅限于名称和唯一标识符.在Objective-C中,您可以获取所有联系人,然后使用NSPredicate过滤KVC查询.结构是:

CNContact-> phoneNumbers - >(String,CNPhoneNumber-> stringValue)

在下面的代码中假设我通过以下方式获取了联系人:

let keys = [CNContactEmailAddressesKey,CNContactPhoneNumbersKey, CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]
let fetchRequest = CNContactFetchRequest(keysToFetch: keys)
var contacts:[CNContact] = []
try! CNContactStore().enumerateContactsWithFetchRequest(fetchRequest) { ...
Run Code Online (Sandbox Code Playgroud)

我想将stringValue与已知值进行比较.这是我到目前为止在游乐场所拥有的:

import UIKit
import Contacts

let JennysPhone    = "111-867-5309"
let SomeOtherPhone = "111-111-2222"
let AndAThirdPhone = "111-222-5309"

let contact1 = CNMutableContact()
contact1.givenName = "Jenny"
let phone1 = CNPhoneNumber(stringValue: JennysPhone)
let phoneLabeled1 = CNLabeledValue(label: CNLabelPhoneNumberMobile, value: phone1)
contact1.phoneNumbers.append(phoneLabeled1)

let contact2 = CNMutableContact()
contact2.givenName = "Billy"
let phone2 = CNPhoneNumber(stringValue: SomeOtherPhone)
let …
Run Code Online (Sandbox Code Playgroud)

contacts ios swift swift2

4
推荐指数
1
解决办法
1163
查看次数

标签 统计

contacts ×2

ios ×2

swift ×2

addressbook ×1

ios9 ×1

swift2 ×1