如果您想按特定顺序对地址进行排序,您可以执行以下操作:
let addresses = contact.postalAddresses.sorted { (address1, address2) -> Bool in
return self.labelOrder(address1.label) < self.labelOrder(address2.label)
}
在哪里
let labelPreferredOrder = [CNLabelHome, CNLabelWork, CNLabelPhoneNumberMobile, CNLabelPhoneNumberiPhone]
private func labelOrder(_ label: String?) -> Int {
if let label = label, let index = labelPreferredOrder.index(of: label) {
return index
}
return labelPreferredOrder.count + 1
}
您可能还需要添加一些硬编码的标签前缀,以防用户使用自己的硬编码值,或者联系人可能是从未使用本地化标准联系人的第三方来源导入的前缀:
let labelPreferredOrder = [CNLabelHome, "Home", "home", CNLabelWork, "Work", "work", CNLabelPhoneNumberMobile, "Mobile", "mobile", "Cell", "cell", CNLabelPhoneNumberiPhone]
底线,以任何你想要的方式对这些进行排序。请注意,您不需要为地址添加与电话相关的标签,但如果您想使用类似的技术对电话号码进行排序,则可以包含它们。
要在数组中获取街道地址的行(您可以分别获取第 1 行和第 2 行,split \n:
let streetLines = address.value.street.split(separator: "\n")
然后将两行街道地址呈现为字符串数组
["123 Main Street", "Suite 100"]