【问题标题】:What is the correct method to add additional properties to CLLocation? [duplicate]向 CLLocation 添加其他属性的正确方法是什么? [复制]
【发布时间】:2021-01-19 18:44:48
【问题描述】:

我想扩展 CLLocation 以存储其他属性,但是当我尝试向扩展添加属性时:

extension CLLocation {
    let newProperty: Double 
}

我收到以下错误:

扩展不能包含存储的属性

我一直在寻找答案,但找不到。

有没有办法,如果有,正确的方法是什么?

【问题讨论】:

  • 这能回答你的问题吗? How to add variable in existing class in swift?
  • 使用 CLLocation 属性和任意数量的其他属性创建您自己的结构。你不能以你想要的方式扩展结构。
  • 由于 CLLocation 是一个 NSObject,您可以使用 Objective-C 运行时添加一个关联对象并使用计算属性公开它,但我不推荐它,除非在非常不寻常的情况下。最好使用包含位置的结构,甚至是 CLLocation 的子类。
  • @DuncanC Apple 说“按原样使用 CLLocation 对象,不要对它们进行子类化。”在他们的docs
  • 很公平。您可以添加一个扩展,该扩展使用关联对象将附加字段附加到对象,然后通过计算属性公开这些字段。但是,这是一种依赖于 Objective-C 运行时的 hack,将来可能不支持。

标签: swift


【解决方案1】:

你不能。您需要创建一个自定义结构并添加一个位置属性 CLLocation 以及您需要的任何属性:

struct Location {
    let location: CLLocation
    let newProperty: Double
}

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2021-04-06
    • 1970-01-01
    • 2020-08-06
    • 2018-07-20
    • 2019-01-06
    相关资源
    最近更新 更多