Rozważmy klasę obserwacji (również zastosowanie do struktury, jak również) w module:Dlaczego publiczna klasa/struktura w Swift wymaga jawnego publicznego inicjatora?
public class Foo {
public func bar() {
// method body
}
}
Uwaga, to nie ma wyraźnego inicjatora; ten przykład nie wymaga specjalnej inicjalizacji. Ta klasa będzie narażona na działanie innych modułów, ponieważ jest oznaczona jako public
. Jednak, gdy kod na zewnątrz modułu próbuje ją zainicjować, kompilator narzeka:
let foo = Foo() // 'Foo' initializer is inaccessible due to 'internal' protection level
W celu zaspokojenia kompilator, muszę określić wyraźne pusty inicjator oznaczony public
:
public class Foo {
public init() {
// This initializer intentionally left empty
}
public func bar() {
// do something useful
}
}
Dlaczego , jeśli klasa jawnie jest public
, czy muszę jawnie zdefiniować publiczny inicjator? Czy nie powinien mieć domyślnie publicznego inicjatora?
Istnieje pokrewne pytanie: here, dotyczące testów jednostkowych, ale uważam, że tak naprawdę nie znajduje się w centrum filozofii projektowania tego, co uważam za zaskakujące.
Powiązane: [W jaki sposób mogę domyślnie upublicznić inicjator dla elementów w Swift?] (Http://stackoverflow.com/questions/26224693/how-can-i-make-public-by -default-the-member-wise-initialiser-for-structs-in-swif) – Hamish