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")
}
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 |
댓글