オプションのバインド

6232 ワード

オプションのバインド
  • optionals
  • について
  • if文および強制解析
  • 選択バインディング
  • 式解析オプション
  • 誤処理
  • 断言
  • optionalsについて
    オプションで値があるか値がないかocの中で1つの方法でオブジェクトを返さないかnil nilを返さないか「合法的なオブジェクトが1つ欠けている」nilがオブジェクトにのみ作用することを示すocはnilという特殊な値で構造体などのCの基本タイプに対して機能しないことを示すSwiftのオプションで、任意のタイプの欠落に値する状況を暗示することができます.特別な値は必要ありません.たとえば
    
    let possibleNumber = "123"
    
    let convertedNumber = Int(possibleNumber)
    
    

    オプションのIntはIntと書かれていますか?Intではありません疑問符は、含まれる値がオプションであることを示します.つまり、Int値が含まれるか、含まないかのいずれかです.(Bool値やString値などの他の値は含まれません.Intまたは何もありません.)
    if文および強制解析
    if文を使用して、オプションに値が含まれているかどうかを判断できます.オプションで値がある場合、結果はtrueです.値がない場合はfalseになります.「===」で表すことができます.次のように等しくないことを示します.
    if convertedNumber != nil {
    
        print ("--------")
    }
    

    オプションパッケージに値が含まれていると判断したら、オプションの名前の後ろに感嘆符(!)を付けることができます.に表示されます.この驚嘆符は「このオプションに値があることは知っています.使用してください.」これをオプション値の強制解析(forcedunwrapping)と呼ぶ
    オプションのバインド
    オプションバインド(optional binding)を使用して、オプションに値が含まれているかどうかを判断し、含まれている場合は一時定数または変数に値を割り当てます.オプションバインドはif文とwhile文でオプションの値を判断し、定数または変数に値を割り当てることができます.if文とwhile文は、制御フローを参照してください.次のようにif文にオプションのバインドを書きます.
    if let constantName = someOptional { 
    
         statements
    
    }
    

    1行のコードに複数のオプション値を含むバインドは「where」でboolの判断条件を引き起こすことができます.これらのバインドオプション値のいずれかがnilであるか、または条件がnilであるかを判断すると、オプションバインド値全体が成功しないと見なされます.
    
    if let firstValue = Int("4"),secondValue = Int("452") where firstValue < secondValue {
    
        print("\(firstValue) < \(secondValue)")
    
    }
    
    

    オプションの変数にnilを割り当てて、値がないことを示します.
    var serverResponseCode: Int? = 404
    // serverResponseCode         Int   404 
    serverResponseCode = nil
    serverResponseCode       
    

    注:nilは、オプション以外の定数および変数には使用できません.コードに定数または変数が値の欠落を処理する必要がある場合は、対応するオプションタイプとして宣言します.オプションの定数または変数を宣言しても値が割り当てられていない場合は、自動的にnilに設定されます.
    
    var surveyAnswer: String?
    
    // surveyAnswer        nil
    
    

    暗黙解析オプション
    前述したように、定数または変数が「値なし」であることを任意に示す.オプションif文で値があるかどうかを判断し、値があればオプションバインドで値を解析できます.プログラム・アーキテクチャでは、最初に値が割り当てられた後、オプションが常に値を持つことを決定することがあります.この場合、オプション値が常に値があると判断し、解析するたびに非常に効果的ではありません.このタイプのオプションは、暗黙的解析オプション(implicitly unwrapped optionals)として定義される.オプションとして使用したいタイプの後ろの疑問符(String?)感嘆符に変更(String!)に表示されます.
    暗黙解析オプションは、オプションが最初に付与された後、決定されてからずっと値がある場合に便利です.暗黙解析オプションは、主にSwiftのクラスの構築中に使用されます.クラスインスタンス間のループ強参照を参照してください.
    暗黙的な解析オプションは、通常のオプションですが、非オプションとして使用できます.毎回解析を使用してオプション値を取得する必要はありません.次の例では、オプションStringと暗黙的解析オプションStringの違いを示します.
    
    1. let possibleString: String? = "An optional string."
    2. println(possibleString!) //          
    3. //    "An optional string."
    4.
    5. let assumedString: String! = "An implicitly unwrapped optional string."
    
    6. println(assumedString) //       
    7. //    "An implicitly unwrapped optional string."
    
    
    
    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // requires an exclamation mark
     
    let assumedString: String! = "An implicitly unwrapped optional string."
    let implicitString: String = assumedString // no need for an exclamation mark”
    
    //    : Apple Inc. “The Swift Programming Language (Swift 2.2)”。 iBooks. 
    
    

    暗黙的な解析オプションを自動的に解析できるオプションとすることができます.あなたがしなければならないのは、宣言するたびに感嘆符をタイプの末尾に置くだけで、値を取るたびに選択可能な名前の末尾ではありません.
    注意:暗黙解析オプションで値がない場合に値を取ろうとすると、ランタイムエラーがトリガーされます.値のない普通のオプションの後ろに驚嘆符を付けるのと同じです.
    暗黙解析オプションを通常のオプションとして使用して、値が含まれているかどうかを判断することもできます.オプションバインドで暗黙解析オプションを使用して、値をチェックして解析することもできます.
    暗黙的な解析オプションを通常のオプションとして、値が含まれているかどうかを判断することができます.
    1. if assumedString {
    2. println(assumedString)
    3. }
    

    オプションバインディングで、暗黙的解析オプションを使用して値をチェックして解析することもできます.
    4. //    "An implicitly unwrapped optional string."
    1. if let definiteString = assumedString { 2. println(definiteString)
    3. }
    4. //    "An implicitly unwrapped optional string."
    

    注意:変数がnilになる可能性がある場合は、暗黙的な解析オプションを使用しないでください.変数のライフサイクルでnilかどうかを判断する必要がある場合は、通常のオプションタイプを使用します.
    エラー処理
    プログラム実行中のエラーを処理するには「error handling」を使用します.「optionals」とは異なり、値の存在または欠落によって関数の成功または失敗を伝えることができます.「error handling」を使用すると、エラーをプログラムの一部にすることができます.
    関数がエラー条件を含んで処理すると、エラーを投げ出すことができます.その関数の呼び出しはエラーをキャプチャし、適切な応答エラーをキャプチャすることができます.
    func canThorwAnError() throws {
    
    
    }
    

    関数は、宣言された「throws」キーワードを通じて異常を投げ出すことができることを示しています.異常を投げ出すことができる関数を呼び出すと、tryキーワードの表現を事前に実行します.swiftは、現在の役割ドメインを超えてcatchで処理されるまで伝播誤差を自動的に含んでいます.
    do {
    
        try canThrowAnError()
        //       
    } catch {
    
        //     
    }
    
    do式は、エラーが1つ以上のcatchに含まれることを許可する新しい役割ドメインを作成する.
    次の例では、error handlingが異なる異常に対する処理をどのようにするかを示します.
    func makeASandwich() throws{
        
        // 。。。
    }
    
    do {
    
        try makeASandwich()
    
        eatASandwich()
    } catch Error.OutOfCleanDishes {
    
        washDishes()
    } catch Error.MissingIngredients(let ingrediends){
        buyGroceries()
    }
    
    
    

    断言する
    オプションで、値が存在するかどうかを判断し、コードの中で値が欠けている場合を優雅に処理することができます.しかし、場合によっては、値が欠落しているか、値が特定の条件を満たしていない場合、コードを実行し続ける必要はありません.この場合、コードにアサーションをトリガーしてコードの実行を終了し、デバッグによって値の欠落の原因を見つけることができます.
    アサーションデバッグの使用
    断言は、実行時に論理条件がtrueであるかどうかを判断します.文字通り、「断言」の条件が本当かどうかを断言する.他のコードを実行する前に、いくつかの重要な条件が満たされていることを保証するには、断言を使用します.条件がtrueと判断された場合、コードの実行は続行されます.条件がfalseと判断された場合、コードの実行が停止し、アプリケーションが終了します.
    もしあなたのコードがデバッグ環境で断言をトリガーした場合、例えばXcodeでアプリケーションを構築して実行すると、不正な状態がどこで発生しているかを明確に見ることができ、断言がトリガーされたときのアプリケーションの状態をチェックすることができます.また、デバッグ情報を追加できると断言します.グローバルassert関数を使用して断言を書くことができます.結果がtrueまたはfalseの式とfalseの情報をassert関数に入力します.式がfalseの場合、この情報は表示されます.
    let age = -3
    
    assert(age >= 0 ,"----------")//    age < 0,       
    
    

    この例では、age>=0がtrueの場合にのみコード実行が継続されます.すなわち、ageの値が負でない場合です.ageの値が負数の場合、コードのようにage>=0がfalseであり、断言がトリガーされ、適用が終了する.断言情報は文字列補間を使用できません.断言情報は省略できます.
    assert(age >= 0)
    

    いつ断言を使用しますか.条件が偽物である可能性がある場合は断言を使用しますが、最終的には条件が本物であることを保証しなければなりません.そうすれば、コードを実行し続けることができます.断言の適用状況:
  • 整数の付属スクリプトインデックスは、カスタム付属スクリプトインプリメンテーションに渡されるが、インデックス値が小さすぎるか、大きすぎる可能性がある.
  • は、関数に値を入力する必要がありますが、不正な値は、関数が正常に実行されない可能性があります.-オプションの値はnilになりますが、後のコードの実行にはnil以外の値が必要です.