Swift-optional-chaining
Swift-オプションの連鎖
「nil」の可能性のあるオプションのクエリ、プロパティ、サブスクリプト、およびメソッドの呼び出しのプロセスは、オプションの連鎖として定義されます。 オプションの連鎖は2つの値を返します-
- オプションに「値」が含まれている場合、関連するプロパティ、メソッド、および添え字を呼び出すと値が返されます
- オプションに 'nil’値が含まれ、その関連プロパティ、メソッド、および添え字がすべてnilを返す場合
メソッド、プロパティ、サブスクリプトへの複数のクエリはグループ化されるため、1つのチェーンの失敗はチェーン全体に影響し、「nil」値になります。
強制的なラップ解除の代替としてのオプションのチェーン
オプションのチェーンは、オプション値の後に「?」で指定されますオプションの値が値を返すときに、プロパティ、メソッド、または添え字を呼び出す。
Optional Chaining '?' | Access to methods,properties and subscriptsOptional Chaining '!' to force Unwrapping |
? is placed after the optional value to call property, method or subscript | ! is placed after the optional value to call property, method or subscript to force unwrapping of value |
Fails gracefully when the optional is 'nil' | Forced unwrapping triggers a run time error when the optional is 'nil' |
「!」を使用したオプションの連鎖プログラム
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムは、クラス名として「選挙投票」を宣言し、メンバーシップ関数として「候補」を含んでいます。 サブクラスは「ポールブース」として宣言され、「名前」は「MP」として初期化されるメンバーシップ関数として宣言されます。 スーパークラスへの呼び出しは、オプションの「!」でインスタンス「cand」を作成することにより初期化されます。 値はその基本クラスで宣言されていないため、「nil」値が格納され、強制アンラップ手順によって致命的なエラーが返されます。
「?」を使用したオプションの連鎖プログラム
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムは、クラス名として「選挙投票」を宣言し、メンバーシップ関数として「候補」を含んでいます。 サブクラスは「ポールブース」として宣言され、「名前」は「MP」として初期化されるメンバーシップ関数として宣言されます。 スーパークラスへの呼び出しは、オプションの「?」でインスタンス「cand」を作成することにより初期化されます。 値は基本クラスで宣言されていないため、「nil」値はelseハンドラーブロックによってコンソールに保存および出力されます。
オプションの連鎖およびプロパティへのアクセスのためのモデルクラスの定義
Swift 4言語は、複数のサブクラスをモデルクラスとして宣言するために、オプションのチェーンの概念も提供します。 この概念は、複雑なモデルを定義し、プロパティ、メソッド、およびサブスクリプトのサブプロパティにアクセスするのに非常に役立ちます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
オプションの連鎖によるメソッドの呼び出し
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
circle()サブクラス内で宣言された関数circleprint()は、「circname」という名前のインスタンスを作成することによって呼び出されます。 関数は、値が含まれている場合は値を返します。それ以外の場合は、ステートメント「if circname.print?.circleprint()!= nil」をチェックして、ユーザー定義の印刷メッセージを返します。
オプションの連鎖による下付き文字へのアクセス
オプションの連鎖を使用して、添え字の値を設定および取得し、その添え字の呼び出しが値を返すかどうかを検証します。 「?」特定の添え字のオプション値にアクセスするために、添え字ブレースの前に配置されます。
プログラム1
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムでは、メンバーシップ関数「radiusName」のインスタンス値は指定されていません。 したがって、関数へのプログラム呼び出しは、他の部分のみを返しますが、値を返すには、特定のメンバーシップ関数の値を定義する必要があります。
プログラム2
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムでは、メンバーシップ関数「radiusName」のインスタンス値が指定されています。 したがって、関数のプログラム呼び出しは値を返すようになります。
オプションタイプの添え字へのアクセス
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
添え字のオプション値には、添え字の値を参照することでアクセスできます。 subscript [0]、subscript [1]などとしてアクセスできます。 「半径」のデフォルトの添え字の値は、最初に[35、45、78、101]として割り当てられ、 '円’のデフォルトの添え字値[90、45、56]]に割り当てられます。 次に、添え字の値がRadius [0]から78、Circle [1]から45に変更されます。
複数レベルの連鎖のリンク
オプションの連鎖により、複数のサブクラスをそのスーパークラスのメソッド、プロパティ、サブスクリプトとリンクすることもできます。
オプションの複数のチェーンをリンクすることができます-
タイプの取得がオプションでない場合、オプションのチェーンはオプションの値を返します。 たとえば、オプションの連鎖による文字列の場合、文字列が返されますか? 値
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムでは、メンバーシップ関数「radiusName」のインスタンス値は指定されていません。 したがって、関数を呼び出すプログラムは、他の部分のみを返しますが、値を返すには、特定のメンバーシップ関数の値を定義する必要があります。
取得タイプがすでにオプションである場合、オプションの連鎖もオプションの値を返します。 たとえば、String? オプションのチェーンを介してアクセスすると、文字列が返されますか? 値..
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
上記のプログラムでは、メンバーシップ関数「radiusName」のインスタンス値が指定されています。 したがって、関数のプログラム呼び出しは値を返すようになります。
オプションの戻り値を持つメソッドのチェーン
オプションのチェーンは、サブクラスで定義されたメソッドにもアクセスするために使用されます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-