Рассмотрит класс последующего (в равной степени применим к структурам, а) в модуле:Почему открытый класс/структура в Swift требует явного публичного инициализатора?
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, относящийся к модульному тестированию, но я нахожу, что он на самом деле не лежит в основе философии дизайна того, что я считаю неожиданным.
Связанный: [Как я могу опубликовать по умолчанию инициализатор-член для структур в Swift?] (Http://stackoverflow.com/questions/26224693/how-can-i-make-public-by -default-the-member-wise-initialiser-for-structs-in-swif) – Hamish