【问题标题】:Constructing an object of class type 'ClassName' with a metatype value must use a 'required' initializer XCode8 Swift 3 changes使用元类型值构造类类型“ClassName”的对象必须使用“必需”初始化程序 XCode8 Swift 3 更改
【发布时间】:2016-10-07 14:28:52
【问题描述】:

由于 XCode 8 swift 3 更改,我正在努力解决这个特殊错误,并且无法在任何地方找到关于为什么会发生这种情况的详细解释。

错误:

使用元类型值构造类类型“PermissionScope”的对象必须使用“必需”初始化程序

在方法中:

public convenience init() {
    type(of: self).init(backgroundTapCancels: true)
}

任何帮助将不胜感激。

【问题讨论】:

标签: ios xcode swift3


【解决方案1】:

我认为这意味着您应该添加世界“必需”

class PermissionScope {

   required init(backgroundTapCancels : Bool){

   }
}

【讨论】:

    【解决方案2】:

    TomV, 我猜为什么下面的事情有效,是从 conv init 你必须调用指定的初始化程序。而且你不能直接从其他类调用 conv init 作为初始化程序。因此,您可能已从某个其他 init 方法从同一类调用此 conv init,因为 self 可用于调用进一步的 init。

    【讨论】:

      【解决方案3】:

      这个编译:

      public convenience init() {
          self.init(backgroundTapCancels: true)
      }
      

      【讨论】:

      【解决方案4】:

      self在实例方法和类方法上是不一样的,你可以通过Xcode的自动补全看到。在实例方法中,self的类型是SomeClass,而在类方法中,它的类型是SomeClass.Type。

      编译器抱怨用元类型值构造类类型“SomeClass”的对象必须使用“必需”初始化程序

      如何理解这个?如果我这样写一个子类。

      在此处查看完整说明: http://blog.fujianjin6471.com/2015/08/31/why-does-constructing-an-object-with-a-metatype-need-a-required-initializer.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 1970-01-01
        • 2014-11-22
        • 2014-09-29
        • 2014-07-02
        • 2016-03-18
        相关资源
        最近更新 更多