본문 바로가기
iOS Swift/문법

[Swift] if, guard,switch Statement

by 야고이 2024. 2. 19.
728x90

240219

240314

if문

강의

예제1)

let num = -123

if num >= 0 {
    print("Positive number or zero")
} else if num % 2 == 0 && num >= 0 {
    print("positive even number")
} else if num % 2 == 1 && num >= 0 {
    print("positive odd number")
} else {
    print("negative number")
}


문제점 : 조건이 중복 됨. && num >= 0 이 부분 조건이 겹치고 있음

let num = 123

if num >= 0 {
    print("Positive number or zero")
    
    if num % 2 == 0 {
        print("positive even number")
    } else if num % 2 == 1 {
        print("positive odd number")
    }
} else {
    print("negative number")
}

위 코드랑 같은 코드

if 문은 얼마든지 중첩해서 사용할 수 있다


예제2) 

let num = 123
if num > 0 {
    print("positive number")
}   else if num  > 10 {
    print("positive number over 10")
}   else if num > 100 {
    print("positive number over 100")
}

이 코드는 프린트가 어떻게 찍힐까?

"positive number" 라고 찍힌다 

if 문은 위에서부터 첫번째 조건부터 확인하기 때문이다

 

let num = 123
if num > 100 {
    print("positive number over 100")
}   else if num  > 10 {
    print("positive number over 10")
}   else if num > 0 {
    print("positive number")
}

이 코드는 프린트가 어떻게 찍힐까?

"positice number over 100"

가장 작은 범위의 조건이 상위에 있어야 우리가 원하는 값을 얻을 수 있다


guard문

강의

반드시 Scope 를 종료해야한다

func validate(id:  String) {
    guard id .count >= 6 else { //조건: 6보다 크거나 같을 때, 아니라면 "too short" print
       print("too short")
        return //else 블록이 실행 되고 . 함수 실행이 여기서 끝남
    }
    
    //논리 연산자를 사용하거나 가드문을 추가
    
    guard id.count <= 20 else {
        print("too long")
        return
    }
    print("Ok")
}

validate(id: "Short")
validate(id: "hyeong") //6보다 크므로 가드문이 실행 되지 않고 ok 가 실행됨
validate(id: "asdfasdfadsfasdfasdfasdfadf")

이 코드를 if 문으로 작성한다면?

//강의 예시 코드
func vaildateUsingIf2(id: String) {
    if id.count >= 6 {
        if id. count <= 20 {
            print("ok")
        } else {
            print("too long")
        }
    } else {
        print("too short")
    }
}

강의에서는 if 문 안에 if 문을 넣었는데 나는 아래처럼 작성함

func validateUsingIf(id: String) {
    if id.count >= 20 {
        print("if: too long")
    } else if id.count <= 6 {
        print("if: too short")
    } else {
        print("if: ok")
    } 
}

두코드를 모두 작성해 보고 가독성을 높은 쪽으로 선택 하면 될 듯

나는 코드는 짧게 작성할 수록 좋다고 생각해서 이번 예제는 내가 작성한 if문을 활용한 코드가 좋은데

가장 작은 범위의 조건이 상위에 있어야 우리가 원하는 값을 얻을 수 있다 

이거 때문에 guard 문을 쓰는게 나은거 같기도 하다

 


switch

강의

let temperature = Int.random(in: -10 ... 30)

switch temperature {
case ...10:
    print("Cold")
case 11...20:
    print("Cool")
case 21...27:
    print("Warm")
case 28...:
    print("Hot")
default:
    break
}

모든 조건을 적고 마지막 default 에 break 를 적어도 되지만 

let temperature = Int.random(in: -10...30)
print("temperature \(temperature)")

switch temperature {
case -10...0:
    print("cold")
case 1...10:
    print("cool")
case 11...20:
    print("warm")
default:
    print("hot")
}

나는 default 에 나머지 범위를 담았다

이렇게 하면 적어야 하는 코드라인이 줄어들겠지

 

 

fallthrough

스위치문은 원하는 조건을 만나면 실행을 끝내는데 fallthrough 를 만나면 다음블록을 실행한다.

그리고 다음 블록에 fallthrough 가 없으면 실행을 끝낸다.

 

예제

로그인 횟수를 9번까지 실패시 실패 메세지 전송. 10번째는 잠그고 이메일 날리기

let attempts = 11

switch attempts {
case ...9:                   //9번째 까지는 경고 문구 출력
    print("다시 입력하세요")
case 10:
    print("계정잠금")          // 10번째에는 계정을 잠그고 이메일 보냄
//    print("send warning email") //아래 default와 중복 됨으로 fallthrough 사용
    fallthrough
default:
    print("send warning email")
}

10으로 값을 넣었을 때 계정잠금 문구와 send warning email 이 출력 됨
11로 입력했을 떄는 send warning email 만 출력 됨


 

728x90

'iOS Swift > 문법' 카테고리의 다른 글

[Swift] String Index  (0) 2024.02.20
[Swift] 개념공부 3  (1) 2024.02.20
[Swift] 자료형과 연산자 개념  (0) 2024.02.16
[Swift] 개념공부  (0) 2024.02.15
[Swift] Scope가 먼데  (0) 2024.02.15

댓글