7.Conditional Statements
if문
if condition {
statements
}
위의 예제는 if문의 구성 입니다.
condition == 조건 == Boolean 입니다.
그 위에 오는 { } 을 if 블록이라 부르겠습니다.
if문은 condition을 평가하고 결과가 true면 if블록을 실행합니다.
반대로 결과가 false면 if 블록을 실행하지 않습니다.
let id = "root"
let password = "123123"
아주 간단한 코드의 예제로 설명하겠습니다.
if id == "root" && password == "123123"{
print("go to admin page")
}
만약 해당 소스에서 id나 pw 가 하나라도 틀리게 되면 코드블록이 실행되지 않게 됩니다.
else문
if condition {
statements
}
else{
statements
}
else 구문은 항상 if문 마지막에 와야 합니다.
간단한 사용 예를 보여드리겠습니다.
위에서 사용한 코드를 가지고 와서
if id == "root" && password == "123123"{
print("go to admin page")
} else {
print("incorrect value")
}
해당 코드의 끝부분에 else 구문을 추가하였습니다.
이제 id나 pw가 틀리게 된다면 contdition 이 false 값이 되어
else에 있는 incorrect value 가 출력되게 될 것입니다.
if condition {
statements
} else if condition {
statements
} else {
statements
}
else if 문 입니다.
else if 블록은 두 블록 사이에 적어야 합니다.
예제를 보여드리겠습니다
let num = 123
if num >= 0 {
print("Positive number or zero")
}else if num % 2 == 0 {
print("positive even number " )
}else if num % 2 == 1 {
print ("positive odd numver " )
}else{
print("negative number")
}
상수 num에 123이란 값을 넣었습니다.
해당 코드의 출력 값은
"Positive number or zero" 입니다.
왜 이 값이 출력되었냐 하면
if num >= 0 {
print("Positive number or zero")
}
상수 num의 값이 123이기 때문에
첫번째의 if 블록의 값이 true가 되면서
그 뒤의 if 블록이 실행되지 않은 것 입니다.
if문을 사용할 때에는 조건의 배치 순서도 중요합니다
guard 문
먼저 예제부터 설명하겠습니다
guard condition else{
statements
}
시작은 guard 키워드로 시작하고, 이어서 condition이 옵니다.
func validate(id :String) {
print("OK")
}
*validate 함수는 id를 검정하는 가상의 함수 입니다
id가 6자리가 넘어햐 한다고 가정해 보겠습니다.
func validate(id: String){
guard id.count >= 6 else {
}
print("ok")
}
if 문 에서는 else 블록을 비워둬도 문제가 없는데
guard 문에서는 블록을 비우면 컴파일 에러가 발생합니다.
func validate(id: String){
guard id.count >= 6 else {
return
}
print("ok")
}
아이디를 생성하고 호출해 보겠습니다.
func validate(id: String){
guard id.count >= 6 else {
print("too short")
return
}
print("ok")
}
validate(id:"short")
validate 함수를 호출하여 short를 적게 되면
validate 의 값이 func validate 로 전달되어 실행되게 됩니다.
만약 컴파일을 해본다면 too short 라는 값이 뜨게 됩니다.
아이디가 6글자를 만족시키지 못하기 때문입니다.
아이디의 글자를 만족시키면 ok 라는 값이 나옵니다.
이번에는 너무 긴 아이디의 글자 수를 제한시켜보겠습니다.
func validate(id: String){
guard id.count >= 6 else {
print("too short")
return
}
guard id.count <=20 else{
print("too long")
return
}
print("ok")
}
validate(id:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
해당 코드를 실행시켜보면 두번째 가드문에서 조건이 false 가 나오기 때문에
출력이 중단되고 too long 이라는 값이 출력되게 됩니다.
같은 코드를 if문으로 바꾸게 되면
func validate(id: String){
if id.vount > 6{
if id.count <= 20 {
print ("ok")
}
else {
print("too long")
}
}
else {
print("too short ")
}
}
if는 condition 이 ture 일때 값을 출력하는데
지금처럼 조건이 여러개일 경우 값을 중첩해야 합니다.
조건이 늘어나면 늘어날수록 게속 중첩을 해야 하기 때문에
코드가 기괴해 집니다.
또한 gaurd로 작성한 코드가 가독성이 더 높습니다.
switch문
우선 문법먼저 예제로 적겠습니다.
switch valueExpression {
case pattern:
statements
case pattern, pattern:
statements
default:
statements
}
우선 switch 키워드를 적고 그 뒤에 비교할 대상이 옵니다.
그 다음에 코드블록이 오고 이 코드블록에는 하나의 case와 default 케이스가 포함이 됩니다.
case 뒤에는 pattern이 오는데 이건 대상과 비교할 값 입니다.
switch 키워드 뒤에있는 비교대상과 case 키워드 뒤에있는 비교할 값이 같다면 case 블록이 실행됩니다.
두번째 case처럼 두개이상의 패턴을 나열할 수도 있습니다.
마지막의 default 블록은 if문의 else 블록과 같습니다.
앞에서 매칭되지 않은 나머지 모든 수를 디폴트 케이스에서 처리합니다.
코드의 예제입니다,
let num = 1
switch num {
case 1:
print("one")
case 2, 3:
print("2 3")
default:
prnit("others")
}
만약 default 에서 아무것도 하지 않을것이라면
print("others") 대신에
break를 적으면 됩니다.
case는 절대 비워두면 안됩니다.
이번에는 범위를 매칭시켜보겠습니다.
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 케이스는 반드시 추가해야 합니다.