제어 전송문은 코드의 진행이 계속 될지 결정하거나, 실행되는 코드의 흐름을 바꾸기 위해 사용한다. Swift에서는 아래의 다섯 가지 전송 제어문을 제공한다.

continue

현재 loop에서 수행 중인 작업을 중지하고, 다음 반복의 시작 부분에서 다시 시작한다. 다음 예제에서는 소문자 문자열에서 모든 모음과 공백을 제거하여 수수께끼 같은 퍼즐 구문을 만든다.

let puzzleInput = "great minds think alike"
var puzzleOutput = ""

let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in puzzleInput {
  if charactersToRemove.contains(character) {
    continue
  }
  puzzleOutput.append(character)
}

print(puzzleOutput)
// Prints "grtmndsthnklk"

puzzleInput의 문자에 대한 for loop에서 charactersToRemote에 포함되어 있다면 loop의 반복이 즉시 종료되고 다음 반복의 시작 부분으로 바로 넘어간다.

break

현재 loop에서 수행 중인 작업을 중지하고, loop를 완전히 종료한다. 따라서 continue와 다르게 다음 반복을 시작하지 않는다. 위 퍼즐 구문을 생성하는 예제에서 continue 대신 break를 사용한다면 puzzleOutput의 값은 gr이 된다.

break는 switch문 안에서 하나 이상의 케이스와 일치한다면 무시하는데 사용할 수 있다. 무시하고자 하는 case 안에 break를 넣어 switch 문의 실행을 즉시 종료한다. switch문 안에서 break가 어떻게 동작하는지 예시를 살펴보자.

let numberSymbol: Character = "三"
var possibleIntegerValue: Int?

switch numberSymbol {
case "1", "١", "一", "๑":
  possibleIntegerValue = 1
case "2", "٢", "二", "๒":
  possibleIntegerValue = 2
case "3", "٣", "三", "๓":
  possibleIntegerValue = 3
case "4", "٤", "四", "๔":
  possibleIntegerValue = 4
default:
  break
}

if let integerValue = possibleIntegerValue {
  print("The integer value of \\(numberSymbol) is \\(integerValue).")
} else {
  print("An integer value could not be found for \\(numberSymbol).")
}

위 코드는 기호가 라틴, 아랍어, 중국어 또는 태국어 기호인지 확인하고, possibleIntegerValue 변수에 적절한 정수 값을 설정한다. 만약 numberOfSymbol이 1~4의 기호가 아닌 경우에는 default: break를 통해 possibleIntegerValue는 여전히 nil 값을 가지고 있다. 이처럼 break는 switch 문에서 특정 케이스에 대해 무시하는데 사용한다.

fallthrough

C 언어의 switch 문은 모든 케이스에 break 구문을 넣어서 특정 case를 타면 switch문은 종료된다.

char input = 'A';
switch(input) {
  case 'A':
    printf("input value is A.")
    break;
  case 'B':
    printf("input value is B.")
    break;
  default:
    printf("input value is not A or B.")
}

만약 case 안에 break를 넣지 않는다면 출력은 아래와 같다.

input value is A.
input value is B.
input value is not A or B.

일치하는 case 뿐만 아니라 switch문의 모든 case를 거쳐가는데, 이를 fall through라고 한다. Swift에서는 기본적으로 case 안에 break가 추가되어 있는 것과 같이 동작한다. 만약 C 언어의 switch문과 같이 fall through한 동작이 필요하다면 fallThrough 키워드를 사용한다.

let integerToDescribe = 5
var description = "The number \\(integerToDescribe) is"

switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
  description += " a prime number, and also"
  fallthrough
default:
  description += " an integer."
}

print(description)
// Prints "The number 5 is a prime number, and also an integer."