繁体   English   中英

Swift:如何声明一个类的静态成员变量

[英]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分配给可选变量。

您有两种选择:

  1. 将变量声明为可选

     static var string: String? 

    要么

     static var string: String? = nil 
  2. 使用非零值初始化:

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM