【发布时间】:2021-01-19 18:44:48
【问题描述】:
我想扩展 CLLocation 以存储其他属性,但是当我尝试向扩展添加属性时:
extension CLLocation {
let newProperty: Double
}
我收到以下错误:
扩展不能包含存储的属性
我一直在寻找答案,但找不到。
有没有办法,如果有,正确的方法是什么?
【问题讨论】:
-
使用 CLLocation 属性和任意数量的其他属性创建您自己的结构。你不能以你想要的方式扩展结构。
-
由于 CLLocation 是一个 NSObject,您可以使用 Objective-C 运行时添加一个关联对象并使用计算属性公开它,但我不推荐它,除非在非常不寻常的情况下。最好使用包含位置的结构,甚至是 CLLocation 的子类。
-
@DuncanC Apple 说“按原样使用 CLLocation 对象,不要对它们进行子类化。”在他们的docs。
-
很公平。您可以添加一个扩展,该扩展使用关联对象将附加字段附加到对象,然后通过计算属性公开这些字段。但是,这是一种依赖于 Objective-C 运行时的 hack,将来可能不支持。
标签: swift