如何在swift中创建UIView单例?

时间:2016-02-19 08:19:21

标签: ios swift uiview

我想避免像这样创建UIView:

let singleView = SingleView()

以下是我如何创建SingleTon:

class SingleView:UIView {

    static let sharedInstance = SingleView()

    private init() {
        super.init(frame:CGRectZero)
    }

    override init(frame:CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

但是它会编译成功。

1 个答案:

答案 0 :(得分:1)

首先,视图单例是一个坏主意,因为UIView实例只有一个superView,例如是另一个视图的子视图。

  • 如果您只使用一次,则共享实例没有任何好处。
  • 如果您在不同的UIViewController个实例中使用它,它可能不会按预期运行。

无论如何,你似乎甚至不想要单身,这很好。

那么,这个怎么样?

class SingleView:UIView {
    init() {
        super.init(frame:CGRectZero)
    }

    override init(frame:CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

现在你可以在构造函数中初始化没有参数,就像你一直想要的那样。

PS:请注意swift中的构造函数总是创建新实例(或者根本没有)。如果要使用单例,则隐藏构造函数并提供工厂方法(或static let