iOS

[Swift] 스위프트 프로그래밍 - Part1 - 6 : 흐름 제어

건복치 2021. 4. 7. 18:39
반응형
야곰님의 스위프트 프로그래밍 책으로 공부한 내용을 잊어버리지 않게 간단하게 정리한 글입니다.

관련 포스트

 

책 범위 : 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판(야곰) - 한빛미디어
반응형