Help us understand the problem. What is going on with this article?

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が一瞬「お?」となりましたが、読めばなるほどですね。
何か間違いがあればご指摘お願い致します。

おしまい。

haxpig
サーバサイド中心。フリーランスエンジニア。 Java / PHP / JavaScript / Swift etc.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした