我将我的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!
}
}
答案 0 :(得分:2)
根据The Swift Programming Language的访问控制部分:
Swift 3及更高版本中的开放式访问仅适用于类和类成员,并且它有所不同 从公共访问如下:
具有公共访问权限或更严格的访问级别的类可以 仅在定义它们的模块中进行子类化。
具有公共访问权限的类成员,或任何更具限制性的访问权限 level,只能在模块所在的子类中重写 它们已被定义。
开放类可以在它们所在的模块中进行子类化 定义,并在任何导入模块的模块中 定义
开放类成员可以被模块中的子类覆盖 它们的定义位置,以及导入模块的任何模块 他们被定义的地方。
open
相当于Swift 2中的public
。有关详细信息,请参阅Swift Evolution提案SE-0117。
要解决此问题,请将formatKey
的原始定义从public
更改为open
,并使用override var formatKey: String { ...
覆盖。
答案 1 :(得分:0)
我确实遇到过同样的问题,然后您可以尝试搜索所有项目-包括pods/ folder
-确保该formatKey
不在项目中的任何地方public var
。