Swift4ツアーをさっと読む ~ Control Flow ~
前回に続いて今日はControl Flow。制御文のことですね。
さっと見ていきます。
一覧
- 条件分岐
- if文
- switch文
- 繰り返し
- for-in文
- while文
- repeat-while
条件分岐
if文
基本的な形
var age = 20
if age >= 60 {
print("Elder")
} else if age >= 20 {
print("Adult")
} else {
print("Child")
}
条件式は必ずBoolean
でなければならず、
暗黙での0との比較は行われない。エラーとなる。
if-let
var optionalName: String? = "haxpig"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
print(greeting) // "Hello, haxpig"
if-let文
を用いるとOptional Binding
することができる。
簡単に言えば、変数optionalName
に値が設定されていれば後続の処理が実行され、スコープ内ではアンラップされた状態で利用ができる。
※Optional
についてはまたの機会。
デフォルト値の利用
let nickName: String? = nil
let fullName: String = "haxpig"
let greeting = "Hi \(nickName ?? fullName)"
print(greeting) // "Hi haxpig"
Optional
の変数に続けて?? デフォルト値
で値がない場合のデフォルト値を設定できる。
(なんでここで紹介されてるのだろう。)
switch文
switch 比較対象 {
case パターン1: 処理
case パターン2: 処理
default: 処理
}
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 vegetable.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
いずれかのパターンに合致した場合、その処理が行われ、後続のパターン処理は実行されないので、break
は不要。
(ただし、処理文がない場合break
が必要)
パターンを複数指定したい場合は、カンマ区切り(,
)で記述できる。
case
内のパターン指定にwhere
を利用できる
default
は必須。
(ただしenum
で全パターンを網羅している場合は不要)
繰り返し
for-in文
配列を回す
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
要素数だけ繰り返す。
辞書を回す
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 (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
key-valueをペアで取り出し、繰り返すことができる。
while文
while文
var n = 2
while n < 2 {
n *= 2
}
print(n) // 2
条件に合致するまで繰り返す。
処理開始時にも判定する。
repeat-while文
var m = 2
repeat {
m *= 2
} while m < 2
print(m) // 4
他言語で言うところのdo-while
。
処理実行後に判定が行われるため、少なくとも一回実行される。
インデックス範囲の指定方法
x..<y
x以上y未満
x...y
x以上y以下
おわり
if-let
やrepeat-while
が一瞬「お?」となりましたが、読めばなるほどですね。
何か間違いがあればご指摘お願い致します。
おしまい。