有没有一种干净的方法可以将 CNPostalAddress 转换为 CNMutablePostalAddress?

Posted

技术标签:

【中文标题】有没有一种干净的方法可以将 CNPostalAddress 转换为 CNMutablePostalAddress?【英文标题】:Is there a clean way to convert a CNPostalAddress to a CNMutablePostalAddress? 【发布时间】:2018-10-19 22:49:19 【问题描述】:

我想修改从CLPlacemarkpostalAddress 属性获得的CNPostalAddress 的值。

由于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
    

有没有更好的方法来进行这种转换?

【问题讨论】:

我不这么认为。 CNMutablePostalAddress 没有初始化程序,您不能从 CNPostalAddress 转换为 CNMutablePostalAddress @LeoDabus 是的,这也是我发现的。看起来很奇怪,因为 NSMutableAttributedString,另一个非 Swifty 类实际上有一个带有 NSMutableString 参数的初始化器。 +1,不知道为什么这被否决了。我用 CNContact 做了很多,不知道 CNPostalAddress 在其他地方使用,所以这对我有好处。 【参考方案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"

【讨论】:

以上是关于有没有一种干净的方法可以将 CNPostalAddress 转换为 CNMutablePostalAddress?的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种干净的方法可以避免在嵌套的参数哈希中调用 nil 上的方法? [复制]

使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的干净方式

在函数式编程中,是否有一种干净的方法可以对某些数据执行许多操作,而无需将数据显式传递到每个函数中?

有没有一种干净的方法来使用 symfony 2.6 设置 websocket

返回单元素 Numpy 数组的干净方法

在Python中返回矩阵中间索引的干净方法