2014-10-01 71 views
1

我有下面的代碼片段:斯威夫特:類類型沒有成員<var>

protocol UpdateUIFromNativeListenerItf { 
    func triggerUI() 
} 

class WmBuildGroupsTask{ 

var mUfn:UpdateUIFromNativeListenerItf? 

    init(){/* ... */} 

// ... 

class func triggerRegister(ufn: UpdateUIFromNativeListenerItf) { 
     mUfn = ufn // WmBuildGroupsTask.Type does not have `mUfn` 
    }  
} 

形成其他類我稱之爲:

var ufn:UpdateUIFromNativeListenerItf = self  
WmBuildGroupsTask.triggerRegister(ufn) 

如何傳遞委託靜態方法?

我需要爲類WmBuildGroupsTask創建單身人士嗎?

我想也寫class var mUfn:UpdateUIFromNativeListenerItf?

但得到:Class var not yet supported

感謝,

回答

4

靜態存儲的屬性在swift類(尚未)中不受支持,但它們在結構中。所以,你可以創建一個在線私人結構有定義靜態屬性:

class WmBuildGroupsTask{ 
    private struct Static { 
     static var mUfn:UpdateUIFromNativeListenerItf? 
    } 

    init(){/* ... */} 

    // ... 

    class func triggerRegister(ufn: UpdateUIFromNativeListenerItf) { 
     Static.mUfn = ufn // WmBuildGroupsTask.Type does not have `mUfn` 
    }  
} 

的缺點是,你必須訪問靜態屬性與結構名稱前綴 - 但我想這是一個可以接受的折衷。

還有另一個顯而易見的方法來解決這個問題:將類轉變爲一個結構,如此明顯,只要提到它就足夠了。只是一個考慮:結構和類不可互換,它們各有利弊。

+0

好吧,明白了,類似於singleton的定義。據我瞭解,即使類沒有實例創建或我有幾個實例,我可以通過委託一次,並確保這個變量有價值!=零,對不對? – snaggs 2014-10-01 13:50:14

+0

是的,如果你在使用之前初始化它 – Antonio 2014-10-01 13:52:41

0

您試圖在靜態上下文來訪問一個成員變量。 mUfn存儲您的類的一個實例,而不是類本身。

+0

我知道,如何在我的情況下創建'mUfn'?謝謝 – snaggs 2014-10-01 13:36:51

相關問題