升级到Swfit 3:无法覆盖' init'已被标记为不可用

时间:2016-11-10 11:47:12

标签: ios swift initialization

我刚刚继承了一个包含Apple's ResearchKit(RK)的iOS项目。

我已经升级到最新版本的RK以及Swift 3.虽然我曾在iOS和RK工作,但我仍然不太自信。无论如何,有一个名为SurveyTask的类,它从RK实现ORKOrderedTask

enter image description here

  

无法覆盖' init'已被标记为不可用

最后这个函数stepz已经定义了,我们有:

super.init(identifier: "survey", steps: stepz)

我检查了ORKOrderedTask类定义,该定义具有init函数。

enter image description here

我一直在阅读有关initializers的内容但尚未找到任何内容。在override convenience之前使用initSurveyTask并不会改变任何内容。同样的错误。任何帮助将不胜感激。

XCode版本8.1。

1 个答案:

答案 0 :(得分:6)

以下是您可以模仿无参数初始化程序并避免unavailable错误的方法:

class MyClass: ParentWithUnavailableInitializer {
    init(workaround _: Void = ()) {
        // Call a designated initializer
        super.init(param: "a very sensible value")
    }
}

// At a call site
let obj = MyClass()

适用于Swift 3.2和Swift 4。