Проверка нескольких почтовых адресов для контакта swift 5 - PullRequest
0 голосов
/ 07 февраля 2020

У меня наконец-то есть время, чтобы go вернуться и поработать над этим. Код ниже тянет адресные метки и идентификаторы. Идентификаторы в порядке. Проблема в том, что когда я печатаю адресную метку, это дает мне следующее:

_$!<Home>!$_

Это нормально или в моем коде есть что-то, что я могу изменить, чтобы это исправить? Все, что я хочу, чтобы это содержало, - "Дом". Нужно ли удалять первые и последние четыре символа, прежде чем они попадут в массив?

func getContactFromID_Ouote2(contactID: String)
    {
        struct contactAddresses
        {
            var theLabel: String
            var theID: String
        }

        let store = CNContactStore()
        var theName = CNContact()
        var theTypes = [contactAddresses]()
        var theAddressID: String = ""
        var theAddressLabel: String = ""

        let theKeys = [CNContactPostalAddressesKey] as [CNKeyDescriptor]

        do {
            theName = try store.unifiedContact(withIdentifier: contactID, keysToFetch: theKeys)

            let postalAddress = theName.postalAddresses
            postalAddress.forEach { (mailAddress) in
                theTypes.append(contactAddresses(theLabel: mailAddress.label!, theID: mailAddress.identifier))

            }

            for theItem in theTypes
            {
                theAddressLabel = theItem.theLabel
                theAddressID = theItem.theID
                print(theAddressLabel)
                print(theAddressID)
            }

        } catch {
            print("Fetching contact data failed: \(error)")
        }

Как проверить, есть ли несколько postalAddresses (home, work, et c). ) для контакта? Если существует несколько postalAddresses, тогда я планирую представить предупреждение, чтобы пользователь мог выбрать тот, который использовать. Представление предупреждения не проблема, мне просто нужна помощь в получении адресов.

Заранее спасибо.

func getContactFromID_Ouote(contactID: String)
    {
        let store = CNContactStore()
        var theName = CNContact()

        let theKeys = [CNContactNamePrefixKey,
                       CNContactGivenNameKey,
                       CNContactFamilyNameKey,
                       CNContactNameSuffixKey,
                       CNContactOrganizationNameKey,
                       CNContactPostalAddressesKey,
                       CNContactFormatter.descriptorForRequiredKeys(for: .fullName)] as! [CNKeyDescriptor]

        do {
            theName = try store.unifiedContact(withIdentifier: contactID, keysToFetch: theKeys)

            contactName = CNContactFormatter.string(from: theName, style: .fullName)!

            contactPrefix = theName.namePrefix
            contactFirst = theName.givenName
            contactLast = theName.familyName
            companyName = theName.organizationName == "" ? "" : theName.organizationName

        } catch {
            print("Fetching contact data failed: \(error)")
        }

        if let firstPostalAddress = (theName.postalAddresses.first),
            let labelValuePair = firstPostalAddress.value(forKey: "labelValuePair") as? AnyObject,
            let finalPostalAddress = labelValuePair.value(forKey: "value") as? CNPostalAddress
        {
            mailAddress = CNPostalAddressFormatter.string(from: finalPostalAddress, style: .mailingAddress)
        }
    }

1 Ответ

1 голос
/ 07 февраля 2020

Вы можете использовать приведенный ниже код для получения нескольких почтовых адресов.

func getContactFromID_Ouote(contactID: String)
    {
        let store = CNContactStore()
        var theName = CNContact()

        let theKeys = [CNContactEmailAddressesKey] as [CNKeyDescriptor]

        do {
            theName = try store.unifiedContact(withIdentifier: contactID, keysToFetch: theKeys)

            let emailAddress = theName.emailAddresses
            emailAddress.forEach { (mailAddress) in
                print("Your Mail Address is :- ",mailAddress.value)
                print("Your Mail Type :- ",mailAddress.label)
            }
        } catch {
            print("Fetching contact data failed: \(error)")
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...