見出し画像

Swiftを始めよう! - その他の制御。

Switches

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?

が出力されます。

処理の流れについては

let vegetable = "red pepper"

と変数宣言されているものに対して、Switchを使って比較して選び出します。

この場合は

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

が該当します。
"where"で条件を決めています。x.hasSuffix("pepper")というのは語尾に"pepper"がつくものという意味になります。

Switchの作法については

case 該当するもの :
    処理

がセットです。これを何パターンか作ります。どれも該当することがない場合の処理を

default:
  処理

として記述することが必要です。

hasSuffixについては


Dictionaries

辞書はペアのデータが入っているますがその片方を取り出して比較します。

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)

for (_ , numbers) in interestingNumbers{
  処理
}

for in 文で配列の値をとる場合に、(_ , numbers)となっている時、numbersには辞書の 最初の要素であれば、"Prime": [2, 3, 5, 7, 11, 13]の[2, 3, 5, 7, 11, 13]が取得できます。この場合はさらに

  for number in numbers {
        if number > largest {
            largest = number
        }

となっていてもう一度for in文には取得した numbersをfor in 文でnumberに値を入れていきます。例えば、最初の値だと[2, 3, 5, 7, 11, 13]の配列が取得できているのでnumberには、2,3,・・・と入っていきます。これを使って

 if number > largest {
            largest = number
        }

で取り出したnumberが大きければlargestに代入していき最大のものが入るようにします。

while

条件が正しければ実行します。以下の場合だと実行するとまずwhile n < 100がチェックされ成立していれば以下の処理( n *= 2)が実行され、実行結果がをチェックし成立しているとさらに実行するということを繰り返します。

最初にチェックされるのでnがもし100以上であれば1回も実行されません

    var n = 2
    while n < 100 {
        n *= 2
    }

    print(n)

これを実行すると最終出力は"128"となります。
n *= 2  となっているので"n"を2倍したものを次々に2倍していくというもので、

4,8,16,32,64,128となり128100以上になるのでループを抜けて出力されます。

repeatを最初に宣言するものでは最初のチェックはありません。まず処理(m *= 2)が実行されます。その後チェックされるので必ず1回は実行されます。あとほ条件が成立している間実行されるということになります。

    var m = 2
    repeat {
        m *= 2
    } while m < 100

    print(m)

これも結果は同じになります。

for in

回数を指定することができます。

0..<4 としている以下は、0,1,2,3とiに代入されます。

    var total = 0
    for i in 0..<4 {
        total += i
    }

    print(total)

実行すると"6"が出力されます。これは

total += i

1+2+3で合計6となります。

0...4  の場合は0,1,2,3,4とiに代入されます。

1+2+3+4 = 10  となります。


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