swift 联系人框架,带有 namePrefix 而不是名称的谓词
swift contacts framework, predicate with namePrefix rather than a name
我正在尝试获取显示特定 'namePrefix'(例如先生、夫人或小姐等)的所有联系人的列表。然而,碰壁了。
我将以下代码与 Predicate 结合使用来获取名称搜索的结果,这很好...
let store = CNContactStore()
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactNamePrefixKey, CNContactPhoneNumbersKey]
// Predicate = prob...? How get namePrefix
let predicate = CNContact.predicateForContactsMatchingName("James")
do {
let fetchedContacts = try store.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
for result in fetchedContacts {
print("\(result.givenName) \(result.familyName) \(result.phoneNumbers) \(result.namePrefix)")
}
} catch {
print("Error unable to fetch")
}
不过,我需要"namePrefix"。
Apple 文档显示 namePrefix 可作为 属性 使用,但经过反复试验,无法找到使用它来过滤我的 'predicate' 结果的方法。
我认为可能有可能使用... "predicateForContactsWithIdentifiers" 但无法找到示例。
我想知道 namePrefix 过滤器是否可以通过上面的谓词行以某种方式完成?或者,如果不能,是否可以用 "predicateForContactsWithIdentifiers"?
来完成
我了解 Apple 不允许对...以外的谓词进行自定义
predicateForContactsMatchingName //
predicateForContactsInContainerWithIdentifier
predicateForContactsWithIdentifiers //
predicateForContactsInGroupWithIdentifier
但是,如果直接根目录不可用,我正在寻找解决方法...?
非常感谢。
获取所有 联系人后,您可以再使用一个谓词:
let prefixPredicate = NSPredicate(format: "namePrefix = 'smth'")
let searchedByPrefix = (fetchedContacts as NSArray)
print(searchedByPrefix.filteredArrayUsingPredicate(prefixPredicate))
其中 'smth' 是您要查找的字符串值。
如果您正在寻找使用联系人框架的直接方式,那么在我看来没有这样的解决方案。
@T。 Pasichnyk - 感谢您对 'Fetching all Contacts' 1st 的想法。
我使用这个然后使用以下代码来过滤 namePrefix 以提供个人名称和使用次数。
var counterForPrefix = Int()
do {
let results = try CNContactStore().unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
if results.isEmpty {
print("nothing in Contacts")
} else {
for result in results {
if result.namePrefix == "S." {
print(result.givenName)
counterForPrefix += 1
}
}
print(counterForPrefix)
}
} catch {
}
我正在尝试获取显示特定 'namePrefix'(例如先生、夫人或小姐等)的所有联系人的列表。然而,碰壁了。
我将以下代码与 Predicate 结合使用来获取名称搜索的结果,这很好...
let store = CNContactStore()
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactNamePrefixKey, CNContactPhoneNumbersKey]
// Predicate = prob...? How get namePrefix
let predicate = CNContact.predicateForContactsMatchingName("James")
do {
let fetchedContacts = try store.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
for result in fetchedContacts {
print("\(result.givenName) \(result.familyName) \(result.phoneNumbers) \(result.namePrefix)")
}
} catch {
print("Error unable to fetch")
}
不过,我需要"namePrefix"。 Apple 文档显示 namePrefix 可作为 属性 使用,但经过反复试验,无法找到使用它来过滤我的 'predicate' 结果的方法。 我认为可能有可能使用... "predicateForContactsWithIdentifiers" 但无法找到示例。
我想知道 namePrefix 过滤器是否可以通过上面的谓词行以某种方式完成?或者,如果不能,是否可以用 "predicateForContactsWithIdentifiers"?
来完成我了解 Apple 不允许对...以外的谓词进行自定义
predicateForContactsMatchingName // predicateForContactsInContainerWithIdentifier predicateForContactsWithIdentifiers // predicateForContactsInGroupWithIdentifier
但是,如果直接根目录不可用,我正在寻找解决方法...?
非常感谢。
获取所有 联系人后,您可以再使用一个谓词:
let prefixPredicate = NSPredicate(format: "namePrefix = 'smth'")
let searchedByPrefix = (fetchedContacts as NSArray)
print(searchedByPrefix.filteredArrayUsingPredicate(prefixPredicate))
其中 'smth' 是您要查找的字符串值。
如果您正在寻找使用联系人框架的直接方式,那么在我看来没有这样的解决方案。
@T。 Pasichnyk - 感谢您对 'Fetching all Contacts' 1st 的想法。 我使用这个然后使用以下代码来过滤 namePrefix 以提供个人名称和使用次数。
var counterForPrefix = Int()
do {
let results = try CNContactStore().unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
if results.isEmpty {
print("nothing in Contacts")
} else {
for result in results {
if result.namePrefix == "S." {
print(result.givenName)
counterForPrefix += 1
}
}
print(counterForPrefix)
}
} catch {
}