Получить адрес электронной почты из CNContactPicker в Swift 2.0 Contact Framework iOS

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

func contactPicker(picker: CNContactPickerViewController, didSelectContactProperty contactProperty: CNContactProperty) {

    let phoneNumberString: String
    let emailString: String

    let contact = contactProperty.contact
    let contactName = CNContactFormatter.stringFromContact(contact, style: .FullName) ?? ""
    let propertyName = CNContact.localizedStringForKey(contactProperty.key)
    let message = "Picked \(propertyName) for \(contactName)"

    if(propertyName == "Phone") {
        let phoneNumber = contactProperty.value as! CNPhoneNumber
        //print(contact.givenName)
        phoneNumberString = phoneNumber.stringValue ?? ""
        inputPhone.text = phoneNumberString.regexPatern("[0-9]+").joinWithSeparator(" ")
    }

    if(propertyName == "Email") {

        I need email address //print(email contact)
    }

    inputName.text = contact.givenName
    inputSurname.text = contact.familyName

    // Display only a person's phone, email, and birthdate
    let displayedItems = [CNContactPhoneNumbersKey, CNContactEmailAddressesKey, CNContactBirthdayKey]
    picker.displayedPropertyKeys = displayedItems

}

person Marian Patak    schedule 12.04.2016    source источник
comment
вы нашли способ?   -  person po5i    schedule 27.10.2016


Ответы (1)


Вы можете получить идентификатор почты, как показано ниже: Swift 2.0

@available(iOS 9.0, *)
func contactPicker(picker: CNContactPickerViewController,
                   didSelectContact contact: CNContact)
{
    if contact.isKeyAvailable(CNContactPhoneNumbersKey)
    {
        let con = contact.mutableCopy() as! CNMutableContact

        //Email
        print(con.emailAddresses[0].valueForKey("labelValuePair")?.valueForKey("value"))
        //MobileNo
        print(con.phoneNumbers[0].valueForKey("labelValuePair")?.valueForKey("value")?.valueForKey("stringValue"))

    }
    else
    {
        print("No phone numbers are available")
    }
}

Ниже работает нормально в Swift 3.0

 @available(iOS 9.0, *)
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {

    if contacts[0].isKeyAvailable(CNContactPhoneNumbersKey)
    {
        let con = contacts[0].mutableCopy() as! CNMutableContact

        let firstName = con.value(forKey: "givenName") as! String
        let lastName = con.value(forKey: "familyName") as! String

        let valPairs = (con.phoneNumbers[0].value(forKey: "labelValuePair") as AnyObject)
        let value = valPairs.value(forKey: "value") as AnyObject
        //Mobile No
        print(value.value(forKey: "stringValue"))

        //Mail
        let mailPair = (con.emailAddresses[0].value(forKey: "labelValuePair") as AnyObject)
        print(mailPair.value(forKey: "value"))

    }
    else
    {
        print("No phone numbers are available")
    }
}
person Jigar Tarsariya    schedule 18.03.2017