[Swift] 스위프트 프로그래밍 - Part1 - 6 : 흐름 제어
야곰님의 스위프트 프로그래밍 책으로 공부한 내용을 잊어버리지 않게 간단하게 정리한 글입니다.
관련 포스트
[Swift] 스위프트 프로그래밍 - Part1 - 1 : 스위프트? / 스위프트 장점 / 특징 / 명명 규칙 / 콘솔 로그 / 주석
[Swift] 스위프트 프로그래밍 - Part1 - 2 : 변수 / 상수 / 데이터 타입 기본 (Int, Bool, Float, Character, String, Any, AnyObject, nil)
[Swift] 스위프트 프로그래밍 - Part1 - 3 - 1 : 데이터 타입 고급 (Tuple, Array, Dictionary, Set)
[Swift] 스위프트 프로그래밍 - Part1 - 3 - 2 : 데이터 타입 고급(열거형 enum)
[Swift] 스위프트 프로그래밍 - Part1 - 5 : 연산자
[Swift] 스위프트 프로그래밍 - Part1 - 6 : 흐름 제어
책 범위 : Part 1. 스위프트 기초 - 6. 흐름 제어
조건문 (if, switch)
gurard 구문도 있지만 14장 2절에서 소개 예정
if 구문
- if, else, else if 등의 키워드 사용해 구현
- 스위프트의 if 구문은 조건값이 꼭 Bool 타입이어야 함
- else if는 몇 개가 이어져도 상관없음
- else 및 else if 블록은 생략 가능
- if 키워드 뒤에 따라오는 조건문을 소괄호로 감싸주는 것 생략 가능(선택 사항) / 중괄호 생략 불가
let first: Int = 5
let second: Int = 10
if first > second {
print("first > second")
} else if (first < second) {
print(first < second)
} else {
print("first == second")
}
switch 구문
- break 키워드 사용은 선택 사항 (case 내부 코드 모두 실행 시 break 없이도 switch 구문 종료)
- case를 연속 실행하고 싶다면 fallthrogh 키워드 사용
- 다양한 값이 들어갈 수 있음
- case에 들어갈 비교 값은 입력 갑과 데이터 타입이 같아야 함
- case XXX: 다음에는 꼭 실행 가능한 코드가 위치해야 함
- 비교될 값이 명확히 한정적인 값(열거형 값 등)이 아닐 때는 default 무조건 작성
- 범위 연산자 사용 가능
- where절을 이용한 조건 확장 가능
switch 입력 값 {
case 비교 값 1:
실행 구문
case 비교 값 2:
실행 구문 // 이번 case를 마치고 switch 구문을 탈출하지 않음. 아래 case로 넘어감
fallthrough
case 비교 값 3, 비교 값 4, 비교 값 5: // 한 번에 여러 값과 비교 가능
break // break 키워드를 통한 종료는 선택 사항
default: // 한정된 범위가 명확지 않은 경우 default 필수
실행 구문
}
반복문 (for-int, repeat-while)
- 비슷한 명령을 반복할 때 사용
- 다른 언어에서의 for 구문이 사라짐
- 괄호 생략 가능
- do-while 구문은 repeat-while로 구현되어 있음
for-in 구문
반복적인 데이터나 시퀀스를 다룰 때 많이 사용
for 임시 상수 in 시퀀스 아이템 {
실행 코드
}
while 구문
- 다른 언어의 while 구문과 크게 다르지 않음
- 특정 조건(Bool 타입으로 지정)이 성립하는 한 블록 내부의 코드를 반복해서 실행
- for-in과 마찬가지로 continue, vreak 등의 제어 키워드 사용 가능
repeat-while 구문
- 다른 언어의 do-while 구문과 크게 다르지 않음
- repeat 블록의 코드를 최초 1회 실행한 후, while 다음의 조건이 성립하면 블록 내부의 코드를 반복 실행
구문 이름표
- 반복문 앞에 이름과 함께 콜론을 붙여 구문의 이름을 지정해주는 것
- 제어 키워드(break, continue 등)와 구문 이름을 함께 사용해 제어
반복문 예제
/* for-in 구문 */
for i in 0...2 {
print(i)
}
for i in 0...5 {
if i.isMultiple(of: 2) { // 짝수만
print(i)
continue // continue 키워드 사용시 바로 다음 시퀀스로 건너뜀
}
print("\(i) == 홀수")
}
let helloSwift: String = "Hello Swift!"
for char in helloSwift {
print(char) // Hello Swift! 한 문자씩 출력
}
var result: Int = 1
// 시퀀스에 해당하는 값이 필요 없다면 와일드카드 식별자(_) 사용하면 됨
for _ in 1...3 {
result *= 10
}
print(result)
// Dictionary
let friends: [String: Int] = ["jay": 30, "joe": 20, "jin": 10]
for tuple in friends {
print(tuple)
}
for (key, value) in friends {
print("\(key) : \(value)")
}
// Set
let 지역번호: Set<String> = ["02", "055", "031"]
for 번호 in 지역번호 {
print(번호)
}
/* while 구문 */
var names: [String] = ["amy", "bella", "cc", "dd", "erin"]
while names.isEmpty == false {
print("Good bye \(names.removeFirst())") // 요소를 삭제함과 동시에 삭제한 요소 반환
}
/* repeat-while 구문 */
addNameLoop: for i in 1..<5 { // 구문 이름표 사용
names.append("no.\(i)")
if i == 3 {
break addNameLoop
}
}
repeat {
print("Good bye \(names.removeLast())")
} while names.isEmpty
참고
아래를 참고해 정리한 내용입니다.
스위프트 프로그래밍 3판(야곰) - 한빛미디어