👨🏻‍💻iOS 공부/Swift 기본기 다지기

[ETC_006] 흐름 제어

728x90
반응형

흐름 제어_ 조건문과 반복문

조건문

if, switch, guard문이 대표적이지만, if와 switch 먼저 볼 것이다.

if 구문

다른 언어와 달리 스위프트의 if 구문은 조건의 값이 꼭 Bool 타입이어야 합니다!

let firstValue: Int = 1

let secondValue: Int = 10


if firstValue < secondValue {

    print("\(firstValue) is smaller than \(secondValue)")

} else {

    print("\(firstValue) is bigger than \(secondValue)")

}

타 언어의 if문과 마찬가지로 else if는 여러 개이어도 상관 없으며, else는 생략가능합니다.
조건수식을 ()으로 묶어주는 것은 선택사항입니다!

switch 구문

switch 또한 ()를 생략할 수 있으며, break 기입은 선택입니다.

기본적인 switch 구문은 아래와 같습니다.

let 입력값: Int = 1

let 비교값1: Int = 5

let 비교값2 = 1...3



switch 입력값 {

case 비교값1: // 입력값과 비교값은 같아야하며, 숫자형이 아닌, 문자열,열거형,튜플 등 여러 개 타입에 대해서도 적용가능하다.

    print("실행구문 자리1")

    fallthrough // case를 마치고 switch 구문을 탈출하지 않고 아래 case로 넘어간다.

case 비교값2:  // 비교값을 여러개 넣을 수도 있다.

    print("실행구문 자리2")

    break // 종료 여부는 선택사항!

default:

    print("실행구문 자리3")

}

where절을 활용해 조건을 더 달아서 진행할 수도 있습니다!


let 종류: String = "포유류"

let 크기 : Int = 50


크기 < 70


switch 종류 {

case "양서류":

    print("양서류입니다.")

case "포유류" where 크기 < 70:

    print("포유류네요!")

default:

    print("아닙니다.")

}

또한 switch 구문이 모든 case에 대응하지 않을 경우에 대비하여 unknown 속성을 부여하기도 한다.
기존 열거형에서 새로운 값이 추가되었을 때와 같은 경우에 대비하는 것이다.

기존에 아래와 같은 경우는 잘 작동이 된다. 


enum 음식 {

    case 피자

    case 치킨

}

let 메뉴: 음식 = .피자

switch 메뉴 {

case .피자 :

    print("피자.")

case .치킨:

    print("치킨!")

default:

    print("") // 이렇게는 그냥 작동하나

}

값이 switch 구문 내에 해당되는 부분이 있으나, 추후 새로운 값을 열거형에 추가하게 될 경우 오류를 뱉게된다.

이를 방지하기 위해, 아래와 같이 작성해준다. 


enum 음식 {

    case 피자

    case 치킨

    case 족발

}

let 메뉴: 음식 = .족발

switch 메뉴 {

case .피자 :

    print("피자.")

case .치킨:

    print("치킨!")

@unknown case _:

    print("뭐라고요??")

    // switch 구문 내에 해당하지 않는 값이기에, unknown을 추가하여 경고 문구를 주어야 한다.

}

새로운 "족발"이라는 값이 추가되고 할당되었다. 

이에 따라 기존 switch 구문으로는 수행이되지 않기에 @unknown case _:  를 사용하여 경고 문구를 나타내준다!

반복문

for-in문

for i in 1...3{

    print(i)

}

i의 위치에는 임시 상수를 집어넣어 해당 반복문 내에서만 할당되어 사용된다. 

숫자 뿐만 아니라, 열거형을 순서대로 출력할 수도 있고, for문 내에 연산장치를 추가하여 값을 변형시켜 출력시킬 수도 있다. 

또한 딕셔너리의 경우를 생각해서 i가 아닌 (key,value)로 받아 사용할 수 있다. 


while문


while문의 경우 특정 조건이 만족될 때 까지 반복하여 실행할 수 있도록 해준다. (조건은 Bool타입이어야 한다.)


var num: Int = 1


while num < 5 {

    num += 1

    

}


num값이 5 미만일 때만 +1을 수행하고 조건이 false가 되면 while문을 탈출하게 된다. 

타 언어들과 똑같이, break, continue등의 제어 키워드 사용이 가능합니다. 


var num: Int = 1


while num < 10 {

    num += 1

    if num == 5 {

        print(num)

        break

    }

}


num이 5가 되었을 때, break로 탈출할 수 있다.

** 중첩된 반복문 내에서 break 사용 시 정확하게 명시하는 것이 좋다. (break 반복문이름)  


var num: Int = 1


while num < 10 {

    num += 1

    if num != 5 {

        print(num)

        continue

    } else {

        break

    }

}


이전의 코드와 유사하지만, num이 5가 아니라면 계속 내부 구문을 처음부터 진행하게하는 continue를 삽입한 것이다. 


repeat-while문


do-while과 유사하다. repeat 구문을 1회 실행하고 while 다음의 조건이 충족되면 다시 repeat으로 돌아간다. 


var names: [String] = ["A","B","C"]


repeat {

    print("My name is \(names.removeFirst())")

} while names.isEmpty == false





728x90
반응형