サーチ…


前書き

if、else if、elseなどのキーワードを含む条件式は、TrueまたはFalseのブール条件に応じて異なるアクションを実行する機能をSwiftプログラムに提供します。このセクションでは、Swift条件、ブール論理、および三項ステートメントの使用について説明します。

備考

条件文の詳細については、 「Swiftプログラミング言語 」を参照してください。

ガードの使用

2.0

Guardは条件をチェックし、falseの場合はブランチに入ります。ガードチェックブランチは、囲みブロックをreturnbreak 、またはcontinue (該当する場合)のいずれかで残す必要があります。そうしないと、コンパイラー・エラーが発生します。これには、 guardが書き込まれたときに、( ifで可能なif )フローを誤って続けることができないという利点があります。

ガードを使用すると、ネストレベルを低く抑えることができ、通常はコードの可読性が向上します。

func printNum(num: Int) {
    guard num == 10 else {
        print("num is not 10")
        return
    }
    print("num is 10")
}

Guardは、 オプションの値があるかどうかをチェックして、外側のスコープで値をアンラップすることもできます。

func printOptionalNum(num: Int?) {
    guard let unwrappedNum = num else {
        print("num does not exist")
        return
    }
    print(unwrappedNum)
}

ガードはオプションのアンラッピングと条件チェックを組み合わせて使用できます whereキーワード:

func printOptionalNum(num: Int?) {
guard let unwrappedNum = num, unwrappedNum == 10 else {
    print("num does not exist or is not 10")
    return
}
print(unwrappedNum)
}

基本条件:ifステートメント

ifステートメントは、 Bool条件がtrueかどうかチェックしtrue

let num = 10

if num == 10 {
    // Code inside this block only executes if the condition was true.
    print("num is 10")
}

let condition = num == 10   // condition's type is Bool
if condition {
    print("num is 10")
}

if文がelse if条件を受け入れるelse ifおよびelseブロックは、代替条件をテストしてフォールバックを提供することができます。

let num = 10
if num < 10 {  // Execute the following code if the first condition is true.
    print("num is less than 10")
} else if num == 10 {  // Or, if not, check the next condition...
    print("num is 10")
} else {  // If all else fails...
    print("all other conditions were false, so num is greater than 10")
}

&&||ような基本演算子複数の条件に使用できます。

論理AND演算子

let num = 10
let str = "Hi"
if num == 10 && str == "Hi" {
    print("num is 10, AND str is \"Hi\"")
}

num == 10がfalseの場合、2番目の値は評価されません。これは、短絡評価として知られています。

論理OR演算子

if num == 10 || str == "Hi" {
    print("num is 10, or str is \"Hi\")
}

num == 10が真であれば、2番目の値は評価されません。

論理NOT演算子

if !str.isEmpty {
    print("str is not empty")
}

オプションのバインディングと "where"節

オプションは、ほとんどの式で使用できるようにするには、 アンラップする必要があります。 if letオプションのバインディングである場合、オプションの値がnilない場合に成功します。

let num: Int? = 10 // or: let num: Int? = nil

if let unwrappedNum = num {
    // num has type Int?; unwrappedNum has type Int
    print("num was not nil: \(unwrappedNum + 1)")
} else {
    print("num was nil")
}

新しくバインドされた変数に同じ名前を再利用して、元のものをシャドウイングできます。

// num originally has type Int?
if let num = num {
    // num has type Int inside this block
}
1.2 3.0

カンマ( , )で複数のオプションのバインディングを結合する:

if let unwrappedNum = num, let unwrappedStr = str {
    // Do something with unwrappedNum & unwrappedStr
} else if let unwrappedNum = num {
    // Do something with unwrappedNum
} else {
    // num was nil
}

オプションのバインディングの後に、 where句を使用してさらに制約を適用します。

if let unwrappedNum = num where unwrappedNum % 2 == 0 {
    print("num is non-nil, and it's an even number")
}

あなたが冒険していると感じたら、任意の数のオプションのバインディングとwhere句をインターリーブします。

if let num = num                           // num must be non-nil
    where num % 2 == 1,                    // num must be odd
    let str = str,                         // str must be non-nil
    let firstChar = str.characters.first   // str must also be non-empty
    where firstChar != "x"                 // the first character must not be "x"
{
    // all bindings & conditions succeeded!
}
3.0

スウィフト3に節が置換されている( where SE-0099 ):単純に別のものを使用し,任意バインディングブール条件を分離します。

if let unwrappedNum = num, unwrappedNum % 2 == 0 {
    print("num is non-nil, and it's an even number")
}

if let num = num,                           // num must be non-nil
    num % 2 == 1,                           // num must be odd
    let str = str,                          // str must be non-nil
    let firstChar = str.characters.first,   // str must also be non-empty
    firstChar != "x"                        // the first character must not be "x"
{
    // all bindings & conditions succeeded!
}

三項演算子

条件は、3項演算子を使用して1行で評価することもできます。

2つの変数の最小値と最大値を求めたい場合は、次のようにif文を使うことができます:

let a = 5
let b = 10
let min: Int

if a < b {
    min = a 
} else {
    min = b 
}

let max: Int

if a > b {
    max = a 
} else {
    max = b 
}

三項条件演算子は、条件が真か偽かに応じて、条件を取り、2つの値のうちの1つを返します。構文は次のとおりです。これは、次の式を持つことと同じです。

(<CONDITION>) ? <TRUE VALUE> : <FALSE VALUE>

上記のコードは、次のような3項演算子を使用して書き換えることができます。

let a = 5
let b = 10
let min = a < b ? a : b
let max = a > b ? a : b

最初の例では、条件はa <bです。これが真であれば、minに割り当てられた結果はaになります。 falseの場合、結果はbの値になります。

注:2つの数値の大きい方または小さい方を見つけることは一般的な操作であるため、Swift標準ライブラリはこの目的のために2つの関数maxとminを提供します。

Nil-Coalescing演算子

nil-coalescing演算子<OPTIONAL> ?? <DEFAULT VALUE>は、値を含む場合は<OPTIONAL> <OPTIONAL> ?? <DEFAULT VALUE>アンラップし、nilの場合は<DEFAULT VALUE>返します。 <OPTIONAL>は常にオプションの型です。 <DEFAULT VALUE>は、 <OPTIONAL>中に格納されている型と一致しなければなりません。

nil-coalescing演算子は、3項演算子を使用する以下のコードの略語です。

a != nil ? a! : b

これは以下のコードで確認できます:

(a ?? b) == (a != nil ? a! : b) // ouputs true

例のための時間

let defaultSpeed:String = "Slow"
var userEnteredSpeed:String? = nil

print(userEnteredSpeed ?? defaultSpeed) // ouputs "Slow"

userEnteredSpeed = "Fast"
print(userEnteredSpeed ?? defaultSpeed) // ouputs "Fast"


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow