Swift의 제어 흐름
애플리케이션 개발 = 로직을 적용하는 작업
어떤 코드를 실행할지, 몇 번을 수행할지에 대한 결정으로 프로그램이 실행될 때 어떤 코드를 지나갈지 결정
-> 실행되는 프로그램의 흐름을 통제하는 것: 제어 흐름(control flow)
-
- 반복 제어(looping control)
- 코드를 몇 번 실행할지
-
- 조건부 제어 흐름(conditional flow control)
- 어떤 코드를 실행할지
반복 제어 흐름
지정된 조건에 만족할 때까지 반복적으로 수행하는 구문
for-in 구문
어떤 컬렉션이나 숫자 범위에 포함된 일련의 항목들을 반복하는 데 사용
for 상수명 in 컬렉션 또는 범위 {
// 실행될 코드
}
상수명(constant name): 상수로 사용되는 이름, 반복문이 실행되는 컬렉션 또는 범위의 현재 항목(또는 값)을 담음, 참조체로 사용
컬렉션(collection) 또는 범위(range): 반복문을 통해 참조 (문자열들의 배열, 범위 연산자, 문자열 자체)
for index in 1...5 {
print("Value of index is \(index)") //1~5
}
참조체가 for 반복문 안에서 필요하지 않다면 밑줄 문자로 대체(반드시 필요하지x)
var count = 0
for _ in 1...5 {
// 현재 값에 대한 참조체가 필요없다.
count += 1
}
while 반복문
지정된 조건에 만족할 때까지 일련의 작업을 반복
while 조건문 { // 조건문이 true인 동안 실행
// 실행될 스위프트 구문
}
var myCount = 0
while myCount < 100 {
myCount += 1
}
repeat … while 반복문
반복문 안의 코드가 언제나 적어도 한 번은 실행되야 하는 상황을 위해 사용(do .. while 반복문)
repeat {
// 실행될 스위프트 구문
} while 조건식
var i = 10
repeat {
i -= 1
} while (i > 0)
break 구문
현재 반복문에서 빠져나와 반복문 다음의 코드로 이동하여 실행을 계속하게 함
var j = 10
for _ in 0 ..< 100 {
j += j
if j > 100 {
break
}
print("j = \(j)")
}
continue 구문
반복문의 나머지 코드를 건너뛰고 반복문의 처음으로 다시 돌아가게 함
var i = 1
while i < 20 {
i += 1
if (i % 2) != 0 { //짝수가 아니라면
continue
}
print("i = \(i)")
}
조건부 흐름 제어
흐름 제어(flow control): 코드가 실행될 때 어떤 코드가 실행되고 어떤 코드를 건너뛰어야 하는지를 정의
if 구문 사용하기
조건식(Boolean expression)이 true로 판단되면 구문 내의 코드가 실행
조건식이 false로 판단되면 구문 내의 코드는 건너뜀
실행될 코드가 한 줄이라고 해도 스위프트에서는 괄호({})가 필수적!
if 조건식 {
// 조건식이 true일 때 수행될 스위프트 코드
}
let x = 10
if x > 9 {
print("x is greater than 9!")
}
if…else… 구문 사용하기
if구문의 조건식이 false로 판단될 때 수행할 코드를 지정
if 조건식 {
// 조건식이 true일 때 수행될 스위프트 코드
} else {
// 조건식이 false일 때 수행될 스위프트 코드
}
if x > 9 {
print("x is greater than 9!")
} else {
print("x is less than 9!")
}
if…else if… 구문 사용하기
다양한 조건을 바탕으로 결정 <-> switch 구문
let x = 9
if x == 10 {
print("x is 10")
} else if x == 9 {
print("x is 9")
} else if x == 8 {
print("x is 8")
}
guard 구문
특정 조건을 만족하지 않은 경우에 현재의 함수 또는 반복문에서 빠져나올 수 있게 해줌
guard <조건문(불리언 표현식)> else {
// 조건문이 false일 때 실행될 코드
< 종료 구문 >
}
// 조건문이 true일 때 실행될 코드
불리언 표현식이 true일 때만 guard 구문 다음에 위치한 코드가 실행
불리언 표현식이 false일 때 수행될 else 절을 반드시 포함!
else절의 코드는 현재의 코드 흐름에서 빠져나가는 구문(return, break, continue, throw)을 반드시 포함!
or 자기 자신을 반환하지 않는 다른 함수나 메서드를 호출
func multiplyByTen(value: Int?) {
guard let number = value, number < 10 else { // 옵셔널 바인딩
print("Number is too hight") // 에러 메시지
return // 종료 구문
}
let result = number * 10
print(result)
}
언래핑된 number 변수는 guard 구문 밖의 코드에서도 유효
반면 if 구문 내에서 언래핑된 변수는 if 구문 밖에서는 유효하지 않다!