在Objective-C中,我經常使用使用static void*
作爲識別標記的模式。有時這些標籤只用於該函數/方法中,因此將該變量放置在函數內部很方便。如何在Swift中爲自己創建一個靜態指針變量?
例如:
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;
}
的問題是,如何寫ObscurePropertyTag
私人恆定指針到自身的斯威夫特? (優選2.1,但未來已公佈的版本應該沒問題)
我環顧四周,似乎我必須將此ObscurePropertyTag
作爲成員變量,並且似乎沒有解決方法。
您可以詳細說明您要實現的目標嗎?將您的Objective-C代碼轉換爲Swift等價物可能不是最好的選擇。 – Michael
@Michael一個例子是將地圖視圖中顯示的MKPolyline對象與其基礎數據模型對象相關聯。另一個用於識別CALayer對象的特定子集(不創建另一個包含它們的集合對象)。 – adib