【问题标题】:CNContacts -- Address Line 2CNContacts -- 地址行 2
【发布时间】:2017-11-28 04:30:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • 文档指出多行街道地址由回车符 (\n) 分隔。

标签: ios swift cncontact cncontactstore


【解决方案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]

底线,以任何你想要的方式对这些进行排序。请注意,您不需要为地址添加与电话相关的标签,但如果您想使用类似的技术对电话号码进行排序,则可以包含它们。


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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2011-08-12
      • 2013-11-06
      • 2011-07-20
      相关资源
      最近更新 更多