CNContacts -- 地址行 2

CNContacts -- Address Line 2

我们如何获取特定联系地址的地址行 2。我能够使用

成功获取地址行 1
cnContact.postalAddresses.first?.value.street

我们用什么属性获取地址行2?

另外,我们如何优先显示家庭地址而不是工作地址​​?这可能吗?

postalAddresses.first?.value.street 是联系人 (cnContact) 邮政地址数组中第一个邮政地址的完整(第 1 行,如果存在,第 2 行)。正如您所说,它不是 "line 1".

如果您想按特定顺序对地址进行排序,您可以这样做:

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]

最重要的是,按照您想要的方式对这些进行排序。请注意,您不需要地址的 phone 相关标签,但如果您想使用类似技术对 phone 数字进行排序,则可以包含它们。


获取数组中的街道地址行(您可以分别获取第 1 行和第 2 行,split 通过 \n:

let streetLines = address.value.street.split(separator: "\n")

然后两行街道地址将呈现为字符串数组

["123 Main Street", "Suite 100"]