我有以下代码片段:
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)
如何将委托(delegate)传递给静态方法?
我需要为 WmBuildGroupsTask
类创建单例吗?
我也尝试编写 class var mUfn:UpdateUIFromNativeListenerItf?
但是得到:Class var not yet supported
谢谢,
最佳答案
Swift 类(目前)不支持静态存储属性,但它们在结构中。所以你可以创建一个内联私有(private)结构并在那里定义你的静态属性:
class WmBuildGroupsTask{
private struct Static {
static var mUfn:UpdateUIFromNativeListenerItf?
}
init(){/* ... */}
// ...
class func triggerRegister( ufn: UpdateUIFromNativeListenerItf ) {
Static.mUfn = ufn // WmBuildGroupsTask.Type does not have `mUfn`
}
}
缺点是您必须访问以结构名称作为前缀的静态属性 - 但我想这是一个可以接受的权衡。
还有一个很明显的解决方法:把class变成struct,很明显,提一下就够了。只是一个考虑因素:结构和类不可互换,它们各有利弊。
关于Swift:类类型没有成员 <var>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142509/