Swift 3覆盖其定义模块之外的非open var

时间:2018-05-21 20:39:14

标签: swift swift3

我将我的swift 2代码转换为swift 3.然后我收到了这个错误。任何人都可以帮我吗?

open override var formatKey: String { //overriding non-open var outside of its defining module
    get {
        if customFormatKey != nil {
            return customFormatKey!
        }
        return String(describing: type(of: self)).components(separatedBy: ".").last!
    }
}

2 个答案:

答案 0 :(得分:2)

根据The Swift Programming Language的访问控制部分:

  

开放式访问仅适用于类和类成员,并且它有所不同   从公共访问如下:

     
      
  • 具有公共访问权限或更严格的访问级别的类可以   仅在定义它们的模块中进行子类化。

  •   
  • 具有公共访问权限的类成员,或任何更具限制性的访问权限   level,只能在模块所在的子类中重写   它们已被定义。

  •   
  • 开放类可以在它们所在的模块中进行子类化   定义,并在任何导入模块的模块中   定义

  •   
  • 开放类成员可以被模块中的子类覆盖   它们的定义位置,以及导入模块的任何模块   他们被定义的地方。

  •   
Swift 3及更高版本中的

open相当于Swift 2中的public。有关详细信息,请参阅Swift Evolution提案SE-0117

要解决此问题,请将formatKey的原始定义从public更改为open,并使用override var formatKey: String { ...覆盖。

答案 1 :(得分:0)

我确实遇到过同样的问题,然后您可以尝试搜索所有项目-包括pods/ folder-确保该formatKey不在项目中的任何地方public var