構造は大まかにこんな感じです クラスAにはクラスBの配列が、クラスBには列挙型Cの変数が入っています
Aは初回初期化時に図のように初期化されます Bの要素が10個出てきますただし、クラス A の B 配列が変更されていないことを除きます。ただし、B で s をエンコードするとき (列挙型 C はステータス)、s の値は出力できます
しかし、エンコード後にエラーが報告されました (s ) (印刷とエンコードの両方にブレークポイントを設定しましたが、後者はそこから離れるとすぐにクラッシュしました)
以下はコンソール情報の一部です:
正常
# キャッチされなかった例外 'NSInvalidArgumentException' によりアプリを終了します。理由: '-[_SwiftValue encodeWithCoder:]: 認識されないセレクターがインスタンス 0x608000444fb0'
同時に、AppDelegate の先頭に Thread 1: signal SIGABRT があります。Google で検索したところ、オブジェクトが早期にリリースされたためのようですが、エンコード前でも値を出力できます。
値を入力できますが、値が期待値ではありません。エンコード前のループで、A クラス B 配列の各 B 列挙型の値が 1 つずつ置き換えられます (オブジェクト B を直接置き換えるのではありません)。
その理由は、列挙型を直接コンパイルするとさまざまな問題が発生するためです。