Posted at

SwiftTourをさっと読む ~Control Flow ~

More than 1 year has passed since last update.


Swift4ツアーをさっと読む ~ Control Flow ~

前回に続いて今日はControl Flow。制御文のことですね。

さっと見ていきます。


一覧


  • 条件分岐


    • if文

    • switch文



  • 繰り返し


    • for-in文

    • while文

    • repeat-while




条件分岐


if文


基本的な形


if文

  var age = 20

if age >= 60 {
print("Elder")
} else if age >= 20 {
print("Adult")
} else {
print("Child")
}

条件式は必ずBooleanでなければならず、

暗黙での0との比較は行われない。エラーとなる。


if-let


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の基本

  switch 比較対象 {

case パターン1: 処理
case パターン2: 処理
default: 処理
}


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 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文


while文

  var n = 2

while n < 2 {
n *= 2
}
print(n) // 2

条件に合致するまで繰り返す。

処理開始時にも判定する。


repeat-while文


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-letrepeat-whileが一瞬「お?」となりましたが、読めばなるほどですね。

何か間違いがあればご指摘お願い致します。

おしまい。