2014-10-01 72 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

相关问题