where


今日はwhereフェスティバルについて説明します.

お寺

where節は、特定のモードの追加条件を組み合わせる役割を果たす.
where節の用途は大体2種類あります.
  • モード追加条件
  • と組み合わせる
  • タイプ制限
  • を追加

    パターンの結合による条件の追加

    func printPoint(_ point: (Int, Int)) {
        switch point {
        case (0,0):
            print("(0,0) is at the origin")
        case (-2...2, -2...2) where point.0 != 1:
            print("(\(point.0), \(point.1)) is near the origin")
        default:
            print("The piont is at (\(point.0), \(point.1))")
        }
    }
    where節は、上述した表現パターンと組み合わせることができる.
    case (-2...2, -2...2) where point.0 != 1:
    見てみましょう.case (-2...2, -2...2)はよく知っています.
    入力されたpointは、いずれも−2〜2のcaseである.where point.0 != 1って何ですか?!
    入力したpointの最初の要素が1ではないことを示します.
    では、次のコードが正常に動作しているかどうかを見てみましょう.
    let origin = (0, 0)
    printPoint(origin)
    
    let point = (1, 2)
    printPoint(point)
    
    let lastPoint = (2, 1)
    printPoint(lastPoint)
    
    // 결과
    (0,0) is at the origin
    The piont is at (1, 2)
    (2, 1) is near the origin
    (2,1)点を過ぎて、私たちが望むように出力しました.

    タイプの拘束を追加

    where節では、タイプに制約を追加できます.
    protocol ProtocolName where Self: UIViewController {
    	...
    }
    このように、where節は、プロトコル拡張において、拡張が特定のプロトコルを遵守するタイプにのみ適用されることを制限することができる.
    Extensionプロトコルを遵守するタイプでは、where節以降のプロトコルも、Extensionプロトコルを遵守するタイプのみがExtensionを適用できることを制限します.
    上記のコードは、ProtocolNameUIViewControllerを遵守するためにのみ使用したいタイプです.

    Q.コードの深さを減らすテクニック🌟。swiftのwhereセクションを探してください。

    String extensionは、以下のコードで実装され、上記の問題が発生しました.
    extension String{
        var isNotValidate: Bool {
            let validateAddressPrefix = ["https://", "http://"]
            for validate in validateAddressPrefix {
                if self.hasPrefix(validate) {
                    return true
                }
            }
            return false
        }
    }
    上記のコードは、文字列がhttps://またはhttp://で始まることを理解するコードである.
    では、where節を使用してコードの深さを低減します.
    extension String {
        var isNotValidate: Bool {
            let validateAddressPrefix = ["https://", "http://"]
            for validate in validateAddressPrefix where self.hasPrefix(validate) {
                return true
            }
            return false
        }
    }
    for validate in validateAddressPrefix where self.hasPrefix(validate)
    構文でコードの深さを減らしました.

    の最後の部分


    where寺を知りました.
    上記の例に加えて、whereセクションも多く使用できるようです.
    上記の例は非常に基本的な部分のようですが、whereセクションを使用すると、より多くの例を追加します.
    じゃ、お先に失礼します.👋