【问题标题】:Init method in swift 3swift 3中的初始化方法
【发布时间】:2016-11-22 18:17:13
【问题描述】:
class MissionControl {

    var nameField=""
    var surnameField=""
    var phoneField=""
    var tcIdField=""
    var photoField=""


    class var sharedInstance: MissionControl {
        struct Singleton { static let instance = MissionControl() }
        return Singleton.instance
    }



    override init() {
        super.init()
    }

}

我在 Swift 2.3 中使用这个类,它运行良好。但我无法与 Swift 3 一起使用。我收到以下编译器错误:

Initializer 不会覆盖其指定的初始化程序 超类

'super' 成员不能在根类中被引用

我该如何解决?

【问题讨论】:

  • 这是一种过时的制作“单例”的方法。请按照这里的首选方式:stackoverflow.com/a/36012158/2227743
  • 关于你的问题:你的类没有继承任何东西,那么你为什么要调用 super?不需要。
  • 你想让它成为一个单例类吗?如果是,“init”应该是私有的,还有更好的方法。

标签: swift swift3


【解决方案1】:

您可以通过不调用 super.init() 来解决此问题。您的类未声明为从另一个基类继承,因此无需调用 super.init()

顺便说一句,对于您的共享实例,我会这样做

static let sharedInstance = MissionControl()

【讨论】:

  • 好的,我将代码更改为:prntscr.com/dac7sw 并使用 prntscr.com/dac851 从另一个视图控制器访问但我在日志部分看不到我的打印。问题出在哪里?
  • @TolgayToklar 不确定问题是什么,但我认为它是懒惰地发生的,即直到需要共享实例并且如果您不使用共享实例,可能是 let 语句正在优化中。不仅要尝试分配,还要在 sharedInstance 上调用方法。
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2014-12-29
  • 2016-09-21
相关资源
最近更新 更多