我一直在玩 CNContactFormatter。我浏览了 Apple 官方网站上的文档以获取此文档。CNContactFormatter 并没有做太多。有没有办法让我使用此格式化程序来生成一个字符串,该字符串取决于联系人具有哪些字段的值?
例如,我希望格式化程序创建一个字符串,该字符串由姓氏、逗号、名字、空格和引号中的昵称组成,如果联系人填写了这些字段,但如果联系人丢失这些字段之一,则字符串仅包含提供的名称,并进行相应的格式化,因此没有逗号不合适。
这个格式化程序似乎甚至不允许我设置名称顺序。以这种方式,这似乎不是很有用。我确实理解此格式化程序在根据设备上的语言或地区设置显示联系人姓名方面的有用性。
我相信我可能已经尽可能多地了解 CNContactFormatter,但我希望有人知道可以帮助我。
我把我的代码放在我用来玩 CNContactFormatter 的下面。我只展示了 fetchMe() 函数的代码,这是理解它的作用所必需的。
func fetchMe() -> CNContact? {
}
func tryContactFormatter() {
guard let me = fetchMe() else {
print("me was not found")
return
}
guard let contactFormatterStringWhenStyleNotChanged = contactFormatter.string(from: me) else {
print("contactFormatter.string() returned nil")
return
}
print("contactFormatterStringWhenStyleNotChanged: \(contactFormatterStringWhenStyleNotChanged)")
guard let cnContactFormatterString = CNContactFormatter.string(from: me, style: .fullName) else {
print("cnContactFormatter.string() returned nil")
return
}
print("cnContactFormatterString: \(cnContactFormatterString)")
print("delimiter for me: \(String(describing: CNContactFormatter.delimiter(for: me)))")
print("name order raw value for me: \(CNContactFormatter.nameOrder(for: me).rawValue)")
print(CNContactFormatter.descriptorForRequiredKeysForDelimiter)
print(CNContactFormatter.descriptorForRequiredKeysForNameOrder)
print(CNContactFormatter.descriptorForRequiredKeys(for: .fullName))
print(CNContactFormatter.descriptorForRequiredKeys(for: .phoneticFullName))
print("formatter style raw value: \(contactFormatter.style.rawValue)")
contactFormatter.style = .phoneticFullName
print("formatter style raw value: \(contactFormatter.style.rawValue)")
guard let contactFormatterStringAfterStyleHasBeenChanged = contactFormatter.string(from: me) else {
print("contactFormatter.string() returned nil")
return
}
print("contactFormatterStringAfterStyleHasBeenChanged: \(contactFormatterStringAfterStyleHasBeenChanged)")
}