見出し画像

楽しい!Swift。 - A Swift Tour (Control Flow-2)

最近バージョン4.4にアップデートされたMacのSwiftPlaygroundsを使って実際にやってみます。

switchを使って比較することができます。

あらゆる種類のデータと比較のための演算子を扱うことができます。(整数や等価チェックだけに限定されません)

let vegetable = "red pepper"
switch vegetable {
case "celery":
    print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
    print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
    print("Is it a spicy \(x)?")
default:
    print("Everything tastes good in soup.")
}
// Is it a spicy red pepper?

defaultは必須になっているので削除すればエラーが出ます。

case let x where x.hasSuffix("pepper"):
    print("Is it a spicy \(x)?")

では定数をletを使って作りx.hasSuffix("pepper")という条件を加えています。この条件で"red pepper"が選択されます。

次は辞書です。for-inの繰り返し処理を使い値を取り出して処理します。

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
print(largest)

辞書は2つのkeyとvalueを持っているので

for (_, numbers) in ・・・

とされています。これを実行すると"_""number"にinterestingNumbersの値が反映され処理されていきます。"_"には何も入らないので"number"だけ使用しています。

  if number > largest {
       largest = number
   }

最終的には一番大きな数字"25"が入ります。"_"も使ってみましょう。 (i, numbers)としてprint()を使って出力してみます。

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
var name = ""
for (i, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            name = i
        }
    }
}
print(largest)
print(name)

25
Square

と2つ出てきました。


whileを使ってみます。まずは"n < 100"の条件に合致する間実行するものは

var n = 2

while n < 100 {
    n *= 2
}
print(n)
// Prints "128"

100を超えた時点で止まります。最初にもし100以上であれば実行されません。この場合"n = 128"と出てきているの100をけた段階で止まったことがわかります。最初に条件が合わない場合は1回も実行されません。

repeat - whileを使う場合はwhileが後に来ているので実行後に条件を調べてそこで合致しない場合は次の実行をしないということになります。なので必ず1回は実行されます。

var m = 2

repeat {
    m *= 2
} while m < 100
print(m)
// Prints "128"


繰り返し処理などで"0..<4"という感じにインデックスの範囲を指定することができます。

var total = 0

for i in 0..<4 {
    total += i
}
print(total)
// Prints "6"

..< では後ろの値は除外され、... は両方の値を含みます。

この記事が気に入ったらサポートをしてみませんか?