我更新到最新的Xcode 8后,出现此错误:
无法从其定义模块
之外的非开放类'WDBaseViewController'继承
我的班级被宣布为
public class ProfileViewController: WDBaseViewController {
}
但我没有改变框架。
答案 0 :(得分:23)
简答:
为了能够对其进行子类化,基类WDBaseViewController
需要在您使用的框架中定义为open
而不是public
。
open class WDBaseViewController {
...
}
如果它是一个内部框架,你可以自己做,否则你将不得不等待作者支持Swift 3。
答案很长:
Swift 3正在为访问控制带来重大变化。
Swift 2只有3个访问级别:
private
:实体仅在定义它们的源文件中可用。internal
:包含定义的整个模块可以使用实体。public
:实体旨在用作API,并且可以由导入模块的任何文件访问。 Swift 3增加了2个访问级别(open
和fileprivate
)并更改了private
的含义:
private
:仅在当前声明中可见的符号。fileprivate
:符号在当前文件中可见。internal
:当前模块中可见的符号。public
:符号在当前模块外可见。open
:用于在当前模块外部进行子类化或覆盖的类或函数。