if문에서 논리적인 구조 및 조건의 순서가 중요하다.
// 논리적인 오류 없도록 구성해야함 ==========
var num = 8
if num >= 0 {
print("0 또는 양수입니다.")
} else if num % 2 == 0 {
print("양의 짝수입니다.")
} else if num % 2 == 1 {
print("양의 홀수입니다.")
} else {
print("음수입니다.")
}
// 올바르게 수정해 본다면? ================
if num >= 0 {
print("0 또는 양수입니다.")
if num % 2 == 0 {
print("짝수입니다.")
} else if num % 2 == 1 {
print("홀수입니다.")
}
} else {
print("음수입니다.")
}
// 조건의 확인 순서를 잘 고려해야함 ==========
var score = 100
if score >= 70 {
print("70점이상입니다.")
} else if score >= 80 {
print("80점이상입니다.")
} else if score >= 90 {
print("90점이상입니다.")
} else {
print("70점미만입니다.")
}
// 올바르게 수정해 본다면 ================
if score >= 90 { // 범위가 작은 조건이 먼저 와야함
print("90점이상입니다.")
} else if score >= 80 {
print("80점이상입니다.")
} else if score >= 70 {
print("70점이상입니다.")
} else {
print("70점미만입니다.")
}
분기처리를 해야한다.
분기 : 어떤 조건을 선택적으로 코드를 실행시키는 것
[스위치문의 특징]
let test1: String = "b"
switch test1{
case "a" :
print("a 입니다.")
case "b" :
print("b 입니다.")
case "c" :
print("c 입니다.")
default:
break
}
var test2:Int = 2
switch test2{
case 1:
print("1")
case 2,3 :
print("2,3")
case 4 :
print("4")
default:
print("끝")
break
}
var isTrue = true
switch isTrue {
case true:
print("true")
case false:
print("false")
}
var num1 = 10
switch num1 {
case ..<10:
print("1") // 매칭된 값에 대한 고려없이 무조건 다음블럭을 실행함
fallthrough
case 10:
print("2")
fallthrough
default:
print("3")
}
var num = 30
// ⭐️ 범위연산자, 패턴매칭 연산자 (참과 거짓의 결과가 나옴)
// 0...50 범위연산자
// ~= num 패턴매칭 연산자
0...50 ~= num // 0~50 까지의 범위를 나타냄
51...100 ~= num
// 잘못된 예시
// 비교연산자와 값을 넣으면 안되고, 비교하려는 값이 와야함
switch temperature {
case < 0 : //이런식으로 작성하면 안된다. ==> ..<0
print("영하 - 0미만")
case >= 0 && <= 18 : //이런식으로 작성하면 안된다. ==> 0...
print("0이상 무덥지 않은 날씨")
default :
break
}
// 올바른 예시
switch num {
case 0...50: // 0...50 ~= 30 내부적으로 패턴매칭으로 확인
print("숫자의 범위: 0 ~ 50")
case 51...100:
print("숫자의 범위: 51 ~ 100")
default:
print("그 외의 범위")
}
// 올바른 예시 2 - ..< 사용
let test1 = 30
switch test1{
case ..<10 :
print("1")
case 11...20 :
print("2")
case 21... :
print("3")
default:
print("끝")
break
}
// 바인딩의 일반적인 의미
var a = 7
let b = a // 바인딩을 한다. (다른 변수/상수의 새로운 식별자로 할당한다.)
var num1 = 4
switch num1{
case let a : // let a = num1
print("바인딩 한 값 : \(a)")
default:
break;
}
// 일단 다른 상수 값에 바인딩한(넣은) 후, 조건절(참/거짓 문장)을 통해 다시 한번 더 조건 확인
// (바인딩 된 상수는 케이스블럭 내부에서만 사용가능하고, 상수 바인딩은 주로 where절하고 같이 사용됨)
num = 7
switch num {
case let n where n % 2==0 :
print("짝수 : \(n)")
case let n where n % 2 != 0 :
print("홀수 : \(n)")
default:
break
}
switch num {
case var n1 where n1 > 10: // 변수로 바인딩도 가능 var n1 = num
n1 = 10
print(n1)
default:
print(num)
}
// where절은 대부분 밸류바인딩 패턴과 함께 사용 (여러 강의에서 또 다룰 예정)