2

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

cnContact.postalAddresses.first?.value.street

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

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

4

2 回答 2

2

如果要按特定顺序对地址进行排序,可以执行以下操作:

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"]
于 2017-11-28T05:07:03.437 回答
1

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

于 2017-11-28T04:46:41.577 回答