:カスタム初期化子は、それらが初期化タイプ以下のアクセスレベルを割り当てることができるアクセスレベル3.1引用</em><em>スウィフトプログラミング言語(スイフト3.1)から
。唯一の例外は、必要なイニシャライザ(Required Initializersで定義)です。必要なイニシャライザは、それが属するクラスと同じアクセスレベルでなければなりません。
もしそうなら、なぜこのコードはコンパイルされて動作しますか?スイフトで
private class GoofyClass {
public init(mood: String) {}
public required init(isCrazy: Bool) {}
}
private let shock = GoofyClass(mood: "shocked")
private let crazy = GoofyClass(isCrazy: true)
なぜでしょうか?スーパークラスはありません、そうですか? 'public'と宣言されている間は、' init(isCrazy:) 'と' init(mood:) 'の2つがあります。私があなたが問題を抱えているのが見えるのは、あなたが何も言わなかったことだけです。私はinitsが 'public'で、classは' private'です。はい、私はそれが(Xcode 8.3コンパイラのバグかもしれません)ビルドには驚いていますが、私はあなたが簡単に 'プライベート'クラスを初期化しようとするあなたのアプリケーションをクラッシュするとは思わない。 – dfd
ここで唯一のことは 'private'クラスと' public'初期化子です。だから私はその本から引用文を投稿した。 :) –
さらに調査した結果、プロトコルのアクセスレベルの動作が本書に記載されているものと異なることがわかりました。それはバグのコンパイラかもしれません。 –