Swift - 흐름제어(Flow Control)

luminoux·2022년 6월 22일
0

Swift 문법

목록 보기
5/8
post-thumbnail

1. if 구문

  • Swift의 if 구문은 값이 꼭 Bool 타입이여야 합니다.
  • else if는 몇개가 이여져도 상관없으며, else 블록은 없어도 상관없습니다.
//if구문 기본 구현

let first: Int = 5
let second: Int = 7

if first > second { // 조건 수식을 소괄호로 묶어주는 것은 선택사항입니다.
	print("first > second")
} else if first < second {
	print("first < second")
} else {
	print("first == second")
}

// 결과는 "first < second"가 출력됩니다.

2. switch 구문

  • switch 구문도 소괄호를 생략할 수 있습니다.
  • break 키워드 사용은 선택사항입니다, 이 방식은 예상치 못한 실수를 줄이는 데 도움이 됩니다.
  • C언어에서는 정수 타입만 들어갈 수 잇엇으나, 스위프트에서는 다양한 값이 들어갈 수 있습니다. 각 case에 들어갈 비교 값은 입력 값과 데이터 타입이 같아야 합니다.
  • 비교될 값이 명확히 한정적인 값(열거형 등)이 아닐때는 default를 꼭 작성해야합니다.

다양한 자료형에서의 switch-case 예제

1. 기본 예제

//switch 구문 기본 구현
import Foundation

let value: Int = 5

switch value {
case 0:
    print("zero")
case 1...10:
    print("1~10")
case Int.min..<0 , 101..<Int.max: // 범위 지정 연산자를 사용이 가능합니다.
    print("value < 0 or value > 100")
    break
default:
    print("10 < value <= 100")
}

// 실행결과 : 1~10

2. 부동소수 타입의 범위 연산 switch-case

// 부동소수 타입의 범위 연산을 통한 switch case 구성

let doubleValue: Double = 3.0

switch doubleValue {
case 0:
	print("Zero")
case 1.5...10.5:
	print("1.5 <= value <= 10.5")
default:
	print("Value == \(doubleValue)")
}

// 실행결과 : 1.5 <= value <= 10.5
    

3. 문자열에서의 switch-case문

let stringValue: String = "Lumi"

switch stringValue {
case "asher":
    print("I'm asher")
case "charlie":
    print("I'm charlie")
default:
    print("I'm \(stringValue)")
}

// 실행결과 : I'm Lumi

4. 튜플 자료형에서의 swich-case


// 튜플 자료형에서의 switch-case 문

typealias Tuple = (name: String, age: Int)

let testTuple = Tuple("Lumi", 25)

switch testTuple {
case ("Lumi", 25):
    print("맞췄습니다!")
default:
    print("떙~!")
}

5. 와일드카드 식별자를 통한 튜플 switch-case 구성

// 와일드 카드 식별자를 통한 튜플 switch-case문 구성

typealias Tuple = (name: String, age: Int)

let testTuple = Tuple("Lumi", 24)

switch testTuple {
case ("Lumi", 25):
    print("맞췄습니다!")
case (_,25): // 와일드카드 사용
    print("나이만 맞췄습니다. 이름은 \(testTuple.name)입니다.")
case("Lumi",_): // 와일드 카드 사용
    print("이름만 맞았습니다. 나이는 \(testTuple.age)입니다.")
default:
    print("떙~!")
}

// 실행결과 : 이름만 맞았습니다. 나이는 24입니다.

6. 값 바인딩을 사용한 switch-case문 구성

// 와일드 카드를 이용하면 무시된 값을 직접 불러와야해서 불편합니다.
// let을 붙힌 값 바인딩을 사용할 수 있습니다,

typealias Tuple = (name: String, age: Int)

let testTuple = Tuple("Lumi", 24)

switch testTuple {
case ("Lumi", 25):
    print("맞췄습니다!")
case (let name,25):
    print("나이만 맞췄습니다. 이름은 \(name)입니다.")
case("Lumi",let age):
    print("이름만 맞았습니다. 나이는 \(age)입니다.")
default:
    print("떙~!")
}

7. where을 이용한 switch-case 확장

let food = "Chicken"
let isFried = true
let isDeliverd = true

switch food {
case "Chicken" where isFried == true && isDeliverd:
    print("후라이드치킨입니다. 배달도 됩니다.")
case "Chicken" where isFried == false:
print("양념치킨입니다.")
default:
    print("치킨입니까?")
}

// 실행결과 : 후라이드치킨입니다. 배달도 됩니다.

fallthorough의 이용

  • swift의 switch문에는 break가 없습니다.
  • 또한, case안은 비워둘 수 없습니다.
  • fallthorough 키워드를 통해 다음 케이스로 넘어갈 수 있습니다.
let stringValue: String = "Joker"

switch stringValue {
case "batman":
    print("I'm batman")
case "superman":
    print("I'm superman")
case "Joker":
    fallthrough
case "Ironman":
    fallthrough
case "catwoman":
    print("I'm \(stringValue)")
default:
    print("I don't know who I am")
}

// 실행결과 : I'm Joker

3. for - in 구문

  • for-in 반복 구문은 반복적인 데이터나 시퀀스를 다룰 때, 많이 사용합니다.
for 임시 상수 in 시퀀스 {
	실행코드
}

예제들

1. 기초적인 for문 사용

for i in 0...2 {
    print(i)
}

2. continue의 사용

  • continue를 사용하면 다음 시퀸스로 건너뜁니다.
for i in 0...5 {
    if i.isMultiple(of: 2) {
        print(i)
        continue // continue를 이용하면 다음 시퀸스로 넘어갑니다.
    }
    
    print("\(i) == 홀수")
}

/* 실행결과
0
1 == 홀수
2
3 == 홀수
4
5 == 홀수 */

3. 문자열에서의 활용

let helloString: String = "hello swift"

for i in helloString {
    print(i)
}
/* 실행결과
h
e
l
l
o
 
s
w
i
f
t
*/

4. 와일드카드 사용

  • 시퀸스에 해당하는 값이 필요없다면 와일드카드 식별자를 이용합니다,.
var result : Int = 1

for _ in 1...3 {
    result *= 10
}

print("10의 세제곱근은 \(result)입니다.")

// 실행결과: 10의 세제곱근은 1000입니다.

4. While 구문

  • 특정 조건이 성립하는 한 블록 내부의 코드를 반복해서 실행
  • 다른 언어의 while과 유사합니다.
  • break, continue 등으로 제어 가능합니다.

1. while문 예시

var name : [String] = ["Lumi", "Asher", "Youth","Avery", "Charlie", "Kyu"]

while name.isEmpty == false {
    print("Good bye \(name.removeLast())")
}
// 배열의 마지막 원소를 반환함과 동시에 삭제합니다.

/* 실행결과 : 
Good bye Kyu
Good bye Charlie
Good bye Avery
Good bye Youth
Good bye Asher
Good bye Lumi
*/

2. repeat-while 구문

  • repeat-while 반복 구문은 다른 프로그래밍 언어의 do-while 구문과 비슷
  • repeat 블록의 코드를 최초 1회 실행한 후, while 다음의 조건이 참이면, 블록 내부의 코드를 반복 실행합니다.
var name : [String] = ["Lumi", "Asher", "Youth","Avery", "Charlie", "Kyu"]

repeat { // 일단 한번 실행
    print("Good bye \(name.removeLast())")
} while name.isEmpty == false // 조건이 맞을 떄 까지

/* 실행결과
Good bye Kyu
Good bye Charlie
Good bye Avery
Good bye Youth
Good bye Asher
Good bye Lumi
*/

3. 구문 이름표

  • 구문에 이름을 지어줘서 여러번 반복문을 사용할 경우 제어에 유리합니다.
var numbers: [Int] = [3, 2342, 6, 3252]


var count: Int = 1

numbersLoop: for num in numbers { // 첫 번째 반복문 이름
    if num > 5 || num < 1 {
        continue numbersLoop
    }
    
    printLoop: while true { // 두번째 반복문 이름
        
        print(num)
        count += 1
        
        if count == num {
            break printLoop
        }
        
    }
    
    removeLoop: while true { // 세번째 반복문 이름
        if numbers.first != num {
            break numbersLoop
        }
        numbers.removeFirst()
    }
}
profile
Apple Developer Academy @ Postech 2022

0개의 댓글