[Swift5] Control Flow 1

Junyoung Park·2022년 2월 22일
0

Swift5 Docs

목록 보기
10/37
post-thumbnail
  • 다음은 Swift 5.6 Doc의 Cotrol Flow 공부 내용을 정리했음을 밝힙니다.

Control Flow

스위프트는 다양한 종류의 제어문을 제공한다. while 문을 통해 여러 번 작업을 실행할 수 있고, if, guard, switch 문은 특정 조건에 따라 다양한 분기점의 코드를 실행할 수 있다. break, continue 문은 코드 내 다른 지점으로 실행 흐름을 변경할 수 있다.

또한 for-in 반복문을 통해 배열, 딕셔너리, 문자열 등 반복적으로 접근 가능한(iterable) 데이터에 하나씩 접근할 수 있다.

switch 문은 튜플, 캐스팅, 인터벌 매칭 등 C언어 등에서 지원하는 것보다 기능이 강력하다.

For-In Loops

for-in 반복문을 통해 배열, 숫자 범위, 문자열 내 캐릭터 등 시퀸스로 표현된 데이터를 하나씩 접근할 수 있다.

let example_for_in = ["This", "is", "Swift"]
for example in example_for_in {
	print("\(example)")
}
// This
// is
// Swift
// for-in loop in array

딕셔너리에 for-in 반복문을 사용할 때에는 키-값 쌍을 통해 접근할 수 있다. 딕셔너리 아이템은 (key, value) 튜플로 리턴되기 때문이다. 정렬된 상태로 접근할 때에는 sorted 메소드를 사용하자.

let dictionary_for_in = [1:"One", 2:"Two", 3:"Three", 4:"Four"]

for (num_int, num_str) in dictionary_for_in {
	print("\(num_int) is \(num_str)")
}
// 1 is One
// 2 is Two
// 3 is Three
// 4 is Four
// for-in loop in dictionary

수 범위에 접근할 수도 있다.

for idx in 1...9{
	print("2 * \(idx) = \(2*idx)")
}
// 2 * 1 = 2
// ...
// 2 * 9 = 18
// for-in loop in numeric ranges

range를 사용할 때 변수를 넣을 수도 있다. range에 들어 있는 값을 사용하지 않고 횟수만 중요하다면 언더스코어 _를 사용하자.

let base = 2
let power = 10
var answer = 1
for _ in 1...power {
	answer *= base
}
// answer = 1*2*2*2...*2 = 2^10
// for-in loop in numeric ranges: underscore _ and variables

... 폐쇄문이 두 범위를 모두 포함하는 코드라면 ..<와 같은 코드를 통해 마지막 범위는 접근하지 않을 수 있다. 특히 인덱스에 접근할 때 유용하다.

let minitues = 60
for check in 0..<minutes{
	// check at 0, 1, ..., 59
}
// for-in loop in numeric ranges: half open range

stride 함수를 통해 시작점과 끝점까지 반복하되, +1이 아니라 보폭을 변경할 수 있다.

let minitues = 60
let interval = 10
for check in stride(from: 0, to:minitues, by:interval){
	// check at 0, 10, 20, 30, 40, 50
}
// for-in loop using stride

for-in 루프문은 시퀸스 형태의 모든 데이터 타입에 반복적으로(iterable) 접근 가능한 매우 유용한 방식이기 때문에, stride 방법까지 잘 익히자.

While Loops

while 반복문은 주어진 조건이 false가 될 때까지 코드를 반복한다. 조건이 반복될 때까지 주어진 횟수를 사전에 알지 못할 때 주로 사용한다.

while은 루프를 시작할 때마다, repeat-while은 루프를 끝날 때 조건을 검사한다.

While

while 문은 조건이 참인지 거짓인지 확인한 뒤 이후 코드를 실행한다. true라면 일련의 코드가 반복되지만, false라면 실행되지 않는다. 즉 while condition { statements}.

반복문을 실행하는 총 횟수가 사전에 정해지지 않은 유형일 때 while이 적절하다는 것을 기억하자.

Repeat While

while과 달리 일단 블록 안의 코드를 한 번 실행한 뒤 조건을 검사해 반복 여부를 확인한다. C언어의 do-while과 유사하다고 보면 될 것 같다.

repeat {statements} while condition 구조이기 때문에 while과 달리 처음 한 번은 필수적으로 실행해야 하는 상황에서 이 문법을 사용하자.

Conditional Statements

특정 조건에 따라 수행할 코드 블록이 다르다면 조건문 ifswitch 등을 사용하자. 조건이 간단하다면 전자를, 다소 고를 선택지가 많다면 후자를 통해 제어할 수 있다. 특히 패턴 매칭 등 코드 분기가 일어나는 순간을 고를 때 switch 문이 적절하다.

If

if 조건이 true라면 블록 안의 코드를 실행한다.

var temperature = 20
if temperature <= 5 {
	print("It's cold outside")
}

else를 통해 iffalse일 때 경우 역시 제어할 수 있다.

var temperature = 20
if temperature <= 5 {
	print("It's cold outside")
} else {
	print("It's OK")
}

두 개 이상의 if를 통해 다양한 조건을 사용하자.

var temperature = 20
if temperature <= 5 {
	print("It's cold outside")
} else if temperature <= 25{
	print("It's good")
} else {
	print("getting hotter")
}

Switch

주어진 변수/상수에 해당하는 값마다 실행할 블록을 따로 설정할 수 있다. if보다 더 많은 블록을 사용할 때 적절하다.

let alphabet: Character = "b"
switch alphabet {
case "a":
	print("first letter")
case "b":
	print("second letter")
case "c":
	print("third letter")
default:
	print("others")
}

No Implicit Fallthrough

C언어에서와 달리 switch 문에서 break 문을 사용하지 않아도 된다. case와 매칭되는 첫 번째 블록이 실행된다면 곧바로 이후 case를 살펴보지 않고 곧바로 종료되기 때문이다. 또한 case 내 블록에서 실행할 블록이 있어야 한다.

여러 개의 조건에서 공통된 블록을 실행하고 싶다면 case에 연달아 조건을 작성하자.

let alphabet: Character = "b"
switch alphabet {
case "a", "A":
	print("first letter")
case "b", "B":
	print("second letter")
case "c", "C":
	print("third letter")
default:
	print("others")
}

Interval Matching

case에서 interval을 사용해 조건에 들어가는 수를 확인할 수 있다.

let cnt = 80
let msg: String
switch cnt {
case 0:
	msg = "no"
case 1..<40:
	msg = "little"
case 40..<100:
	msg = "some"
default:
	msg = "many"
}
print("There are \(msg) things.")
profile
JUST DO IT

0개의 댓글