Получить почтовый адрес от контакта Swift

Я создаю приложение, пользователь может выбрать контакт, а затем получить имя, день рождения и почтовый адрес. Я могу получить и отобразить имя и день рождения. Но я не могу получить адрес

вот мой код

@IBOutlet weak var names: UILabel!
@IBOutlet weak var birthday: UILabel!
@IBOutlet weak var address: UILabel!

var storeNames = ""
var storeBirthday = ""
var storeAddress = CNLabeledValue()

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    names.text = storeNames
    birthday.text = storeBirthday
    address.text = String(storeAddress)
}

func getDateStringFromComponents(dateComponents: NSDateComponents) -> String! {
    if let date = NSCalendar.currentCalendar().dateFromComponents(dateComponents) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale.currentLocale()
        dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
        let dateString = dateFormatter.stringFromDate(date)

        return dateString
    }
    return nil
}

@IBAction func showContacts(sender: AnyObject) {
    let contactPickerViewController = CNContactPickerViewController()
    contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "birthday != nil")
    contactPickerViewController.delegate = self
    presentViewController(contactPickerViewController, animated: true, completion: nil)
}

func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
    storeNames = contact.givenName //Get Names
    if let bday = contact.birthday?.date as NSDate! {
        let formatter = NSDateFormatter()
        formatter.timeZone = NSTimeZone(name: "UTC")
        formatter.dateFormat = "dd/MM/yyyy"
        let stringDate = formatter.stringFromDate(contact.birthday!.date!)
        //Their birthday as a String:
        storeBirthday = stringDate //Get Birthday
    }

    storeAddress = contact.postalAddresses[0]
    print(storeAddress)
}

он печатает вот так

<CNLabeledValue: 0x7fca63c12780: identifier=150C06A9-8008-4496-B27A- CE2648622793, label=_$!<Work>!$_, value=<CNPostalAddress: 0x7fca63c0dce0: street=165 Davis Street, city=Hillsborough, state=CA, postalCode=94010, country=, countryCode=us, formattedAddress=(null)>> 2016-12-08 19:35:09.920 Birthdays[638:9739] plugin com.apple.MobileAddressBook.ContactsViewService invalidated

извините, но я не знаю, как получить почтовый адрес


person Ariel Gemilang    schedule 08.12.2016    source источник
comment
storeAddress является CNPostalAddress объектом. Итак, let streetAddress = storeAddress.street?   -  person Larme    schedule 08.12.2016


Ответы (2)


Вы должны указать значение вашего storeAddress, это объект CNPostalAddress с нужными вам свойствами

if let address = storeAddress.value as? CNPostalAddress {

   let city = address.city
   ...
}
person Thomas G.    schedule 08.12.2016

Самый простой способ, который я нашел, чтобы разобрать адрес на отдельные строки, был таким:

let emailAddress = contact.emailAddresses.count > 0 ? contact.emailAddresses[0].value : ""
let address = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.street)" : ""
let city = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.city)" : ""
let state = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.state)" : ""
let zipCode = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.postalCode)" : ""
let country = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value.country)" : ""

я получаю такие значения:

contact.postalAddresses[0].value.street
person ricks    schedule 18.07.2017