【发布时间】:2016-05-21 16:35:04
【问题描述】:
在 Objective-C 中,我经常使用static void* 作为识别标签的模式。有时这些标签只在该函数/方法中使用,因此将变量放在函数内很方便。
例如:
MyObscureObject* GetSomeObscureProperty(id obj) {
static void* const ObscurePropertyTag = &ObscurePropertyTag;
MyObscureObject* propValue = objc_getAssociatedObject(id,ObscurePropertyTag);
if(!propValue) {
propValue = ... // lazy-instantiate property
objc_setAssociatedObject(obj,ObscurePropertyTag,propValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
return propValue;
}
问题是,如何在 Swift 中编写 ObscurePropertyTag private-constant-pointer-to-itself ? (最好是 2.1,但未来已经发布的版本应该没问题)
我环顾四周,似乎我必须把这个ObscurePropertyTag 作为一个成员变量,而且似乎没有办法解决它。
【问题讨论】:
-
您能否详细说明您要实现的目标。将您的 Objective-C 代码转换为等效的 Swift 代码可能不是最佳选择。
-
@Michael 一个例子是将地图视图中显示的
MKPolyline对象与其底层数据模型对象相关联。另一个是用于识别CALayer对象的特定子集(无需创建另一个集合对象来包含它们)。
标签: objective-c swift pointers