Есть ли чистый способ преобразовать CNPostalAddress в CNMutablePostalAddress?

Я хочу изменить значения CNPostalAddress, который я получил от postalAddress свойство CLPlacemark,

поскольку CNPostalAddress имеет неизменные свойства, я хочу преобразовать его в CNMutablePostalAddress, Однако, кажется, нет чистого способа сделать это. Мой текущий метод таков:

extension CNPostalAddress {
    var mutableAddress: CNMutablePostalAddress {
        let address = CNMutablePostalAddress()

        address.city = city
        address.country = country
        address.postalCode = postalCode
        address.state = state
        address.street = street

        [...]

        return address
    }
}

Есть ли лучший способ сделать это преобразование?

1 ответ

Решение

CNPostalAddress это класс, который расширяется NSObject, Это означает, что у вас есть доступ к mutableCopy,

let contact = ... // some CNPostalAddress instance obtained elsewhere
let newContact = contact.mutableCopy() as! CNMutablePostalAddress
newContact.city = "Here"

Нет необходимости копировать отдельные свойства.

Или как обновление вашего расширения:

extension CNPostalAddress {
    var mutableAddress: CNMutablePostalAddress {
        return mutableCopy() as! CNMutablePostalAddress
    }
}

let contact = ... // some CNPostalAddress instance obtained elsewhere
let newContact = contact.mutableAddress
newContact.city = "Here"
Другие вопросы по тегам