[英]Swift: How to declare a static member variable which is a class
我正在尝试声明一个具有静态变量的类,我想将其设置为类的对象,即
class MyViewController: UIViewController {
@IBOutlet weak var title: UILabel!
static var staticSelf:MyViewController
此声明生成以下错误:
"class var declaration requires an initializer expression or getter/setter specifier".
所以我尝试了几次添加初始化器的尝试,但只是获得了更多或不同的编译错误。 所以我尝试在错误中添加一个getter / setter说明符,但这会在运行时产生无限循环。 我试过几个版本,这是最新版本:
class MyViewController: UIViewController {
@IBOutlet weak var title: UILabel!
static var staticSelf:MyViewController {
set (selfInstance) {
MyViewController.staticSelf = selfInstance
}
get {
return MyViewController.staticSelf
}
}
override func viewDidLoad() {
super.viewDidLoad()
MyViewController.staticSelf = self
}
}
实现setter方法的初始尝试是staticSelf = selfInstance
,XCode将此标记为错误并自动更正为self.staticSelf = selfInstance
,但这会导致self.staticSelf = selfInstance
循环,因此我将其更改为MyViewController.staticSelf = selfInstance
,但这也创造了一个无限循环。
我已经尝试了很多东西来设置它并且可以在3秒内用Objective-C完成它,现在我对Swift非常厌倦了。
基本的例子
class MyClass {
static var string: String
}
不起作用,因为单元化变量的值nil
。 但是,在Swift中,您只能将nil
分配给可选变量。
您有两种选择:
将变量声明为可选
static var string: String?
要么
static var string: String? = nil
使用非零值初始化:
static var string: String = "some value"
如果您的目标是创建单例,请参阅Apple解决方案的官方指南 :
class MyViewController: UIViewController {
static let staticSelf = MyViewController()
}
假设在objective-c中你会使用一个可能为null的指针,在Swift中,你会做类似的事情。
class MyViewController: UIViewController {
static var staticSelf:MyViewController?
override func viewDidLoad() {
super.viewDidLoad()
MyViewController.staticSelf = self
}
func somefunc() {
}
}
当您需要从其他地方访问它时:
if let controller = MyViewController.staticSelf {
controller.somefunc()
}
您需要在声明行中立即指定值:
static var staticSelf = MyViewController()
这是顺便说一句。 在Swift中创建单例的标准模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.