web-dev-qa-db-ja.com

Swift ifステートメント-コンマで区切られた複数の条件?

Swift

if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
    ...
}

ドキュメントには次のように記載されています:

...コードはそのビューコントローラーをローカル定数sourceViewControllerに割り当て、sourceViewControllerのmealプロパティがnilであるかどうかを確認します。

質問:Swiftでは、この例のようにMealViewControllerの後にカンマがある)ifステートメントで複数の条件を使用できますか?

ドキュメントではこれを見ていません。

26
Marcus Leon

はい、書きます

if let a = optA, let b = optB, let c = optC {

}

Swiftは、すべての割り当てが適切に完了しているの場合にのみ、IFの本体を実行します。

もっと

この手法の別の機能:割り当てはorderで行われます。

したがって、値がaに適切に割り当てられている場合にのみ、Swiftはbに値を割り当てようとします。以下同様です。

これにより、以前に定義した変数/定数を次のように使用できます

if let a = optA, let b = a.optB {

}

この場合(2番目の割り当てで)aを安全に使用しているのは、わかっているであるため、そのコードが実行されると、aに有効な値が入力されます。

49
Luca Angeletti

はい。 Swift:ドキュメンテーション:言語ガイド:基本:オプションのバインディング 言います:

単一のifステートメントには、必要に応じてカンマで区切って、オプションのバインディングとブール条件をいくつでも含めることができます。オプションのバインディングの値のいずれかがnilであるか、ブール条件がfalseに評価される場合、ifステートメントの条件全体がfalseと見なされます。次のifステートメントは同等です。

if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}   
// Prints "4 < 42 < 100"

if let firstNumber = Int("4") {
    if let secondNumber = Int("42") {
        if firstNumber < secondNumber && secondNumber < 100 {
            print("\(firstNumber) < \(secondNumber) < 100")
        }   
    }   
}   
// Prints "4 < 42 < 100"
17