斯威夫特:类类型没有成员
问题描述:
我有下面的代码片段:斯威夫特:类类型没有成员<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
感谢,
答
静态存储的属性在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`
}
}
的缺点是,你必须访问静态属性与结构名称前缀 - 但我想这是一个可以接受的折衷。
还有另一个显而易见的方法来解决这个问题:将类转变为一个结构,如此明显,只要提到它就足够了。只是一个考虑:结构和类不可互换,它们各有利弊。
答
您试图在静态上下文来访问一个成员变量。 mUfn
存储您的类的一个实例,而不是类本身。
+0
我知道,如何在我的情况下创建'mUfn'?谢谢 – snaggs 2014-10-01 13:36:51
好吧,明白了,类似于singleton的定义。据我了解,即使类没有实例创建或我有几个实例,我可以通过委托一次,并确保这个变量有价值!=零,对不对? – snaggs 2014-10-01 13:50:14
是的,如果你在使用之前初始化它 – Antonio 2014-10-01 13:52:41