【发布时间】:2016-10-25 20:55:35
【问题描述】:
考虑模块中的跟随类(同样适用于结构):
public class Foo {
public func bar() {
// method body
}
}
注意,它没有显式的初始化器;这个例子不需要任何特殊的初始化。这个类将暴露给其他模块,因为它被标记为public。但是,当模块外部的代码尝试初始化它时,编译器会报错:
let foo = Foo() // 'Foo' initializer is inaccessible due to 'internal' protection level
为了让编译器满意,我必须定义一个显式的空初始化器,标记为public:
public class Foo {
public init() {
// This initializer intentionally left empty
}
public func bar() {
// do something useful
}
}
为什么,如果类是显式public,我需要显式定义一个公共初始化器吗?它不应该隐含一个公共初始化器吗?
有一个相关的问题here,与单元测试有关,但我发现它并没有真正成为我认为令人惊讶的问题的设计理念的核心。
【问题讨论】: