我有以下代码段:
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
谢谢,
答案 0 :(得分: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`
}
}
缺点是你必须访问带有结构名称前缀的静态属性 - 但我想这是一个可以接受的权衡。
还有另一种明显的方法可以解决这个问题:将类转换为结构,很明显只需提及它就足够了。只是一个考虑:结构和类不可互换,它们各有利弊。
答案 1 :(得分:0)
您正尝试在静态上下文中访问成员变量。 mUfn
存储在您的类的实例中,而不是类本身。