Swift 2创建单例类和初始化值

时间:2015-12-01 19:17:35

标签: ios swift singleton swift2

我正在尝试创建一个单例类。无法初始化价值。这是我的代码 -

import UIKit

class SHProxy: NSObject {

    static let sharedInstance = SHProxy()
    var questionClickCount = 0
    var overlayView : UIView
    private override init() {
        overlayView = loadOverLayView()  //Error is in this line
    }

 private func loadOverLayView() -> UIView{
        let nibName = NSBundle.mainBundle().loadNibNamed("SHOverlayView", owner: self, options: nil)
        return nibName[0] as! UIView
    }

}

错误:使用self in方法调用" loadOverLayView"在super.init初始化自我之前

2 个答案:

答案 0 :(得分:1)

你不能在super.init()之前使用self(或任何自我调用)。但在你的情况下你不能添加super.init()作为函数的第一个语句,因为overlayView是一个非可选值(它会抛出另一个错误,如“属性self.overlayView未初始化在super.init致电)

您可以使用computed属性来处理这种情况,而不是这样做。

class SHProxy: NSObject {

    static let sharedInstance = SHProxy()
    var questionClickCount = 0
    var overlayView : UIView
    {
        get
        {
            let nibName = NSBundle.mainBundle().loadNibNamed("SHOverlayView", owner: self, options: nil)
            return nibName[0] as! UIView
        }
    }

    private override init()
    {
        super.init()
    }
}

答案 1 :(得分:0)

您收到错误的原因是您在访问任何派生类的变量或函数之前未调用超级初始值设定项。由于必须在调用超级初始化程序之前初始化所有选项,否则当前逻辑将无效。而是使用惰性属性:

lazy var overlayView: UIView = {
   return self.loadOverLayView()
}()