[Swift 문법] 조건문(if문, switch문)

!·2022년 6월 23일
0

Swift 문법

목록 보기
7/27

if..else문

  • 다른 프로그래밍 언어와 마찬가지로 if, else if, else 키워드를 통해 표현한다.
  • 자바와 마찬가지로 조건문에는 반드시 Bool타입 자료형이 와야한다.
  • 반드시 {}는 붙여야하며, ()는 선택사항이다.
if(someInteger== 4){
	print("it is 4")
}
else{
	print("it is not 4")
}  

switch문

  • switch문도 다른 프로그래밍 언어와 마찬가지로 switch, case 키워드를 통해 표현한다.
  • 하지만 모든 범위의 case를 커버하지 못할경우 반드시 default 키워드를 사용해야한다!
  • defalut : 대신 case _: 를 사용해도 된다. 똑같은 표현이다. (_ 은 와일드 카드 식별자이다.)
  • swift에서의 switch문은 break을 따로 명시할 필요없이 알아서 수행이 된다.
  • 만약 break을 사용하지 않은 연산을 수행하고자 한다면 fallthrough 키워드를 이용하면 된다.
switch "hello"{
case "hi":
	print("hi")
case "hola":
	print("hola")
    //fallthrough
case "안녕하세요":
	print("안녕하세요")
case "hi":
	print("hi")
default :
	print("nope")
// 문자열 외에도 정수, 실수 등의 다양한 기본타입에 대해서도 switch문이 가능하다.
  • 만약 두 개 이상의 case를 묶어서 하나의 연산을 수행하고자 한다면 어떻게 하면될까?
switch "hello"{
case "hi", "hola", "안녕하세요":
	print("nope")
case "hi":
	print("hi")
default :
	print("nope")
// 문자열 외에도 정수, 실수 등의 다양한 기본타입에 대해서도 switch문이 가능하다.

범위연산자와 switch문

  • 범위 연산자는 .....<가 있다.
  • 예를 들어, 1...3은 1이상 3이하이고, 1..<3은 1이상 3미만을 나타낸다.
let array = 1..<5 // 
for i in array{
	print(i)
}
print(array.contains(3))	// true
print(array.contains(2))	// true
print(array.contains(5))	// false


let names = ["lee","kim","hwang","park", "son"]
let count = names.count

for i in 0..<count{
	print(names[i])
}
  • 이 범위연산자를 이용하여 switch문을 조금더 효과적으로 표현할 수 있다.
switch someInt{
	case 90...100:
    	print("A")
    case 80..<90:
    	print("B")
    case 70..<80:
    	print("C")
    case 60..<70:
    	print("D")
    default:
    	print("F")
}

열거형과 Switch문

  • 열거형도 타입이기 때문에 switch의 조건부에 열거형 타입의 변수가 올 수 있다.
enum School{
	case elementry
    case middle
    case high
    case university
    case colleage
}
let school: School = .middle
switch school{
	case .elementry:
    	print("초등학교")
    case .middle:
    	print('중학교")
    case .high:
    	print("고등학교")
    case .university:
    	print("대학생")
    case _:
    	print("전문학생")
}
  • 만약 열거형에 새로운 case가 추가되는 경우는 어떻게 해야할까? 위의 경우에서 case .graduate 라는 케이스가 열거형에 추가되었다고 해보자. 만약 그렇다면 문법적 오류는 발생하지 않지만 논리적 오류 는 발생할 것이다. 이는 졸업생이 출력되야 하지만 전문학생이 출력되는 경우일 것이다. 이 경우에 어떻게 하면 좋을까?
switch school{
	case .elementry:
    	print("초등학교")
    case .middle:
    	print('중학교")
    case .high:
    	print("고등학교")
    case .university:
    	print("대학생")
    @unknown case _:
    	print("전문학생")
}

@unknown 속성을 default case에 추가한다면, switch 문의 case에 있지 않은 다른 타입이 들어오는 경우에 컴파일 오류를 발생시켜주므로, 안정적으로 문제를 해결할 수 있다.


튜플과 스위치문

값 바인딩을 이용해 튜플의 원소에 switch문으로 접근할 수 있다.

typealias PersonTuple = (name: String, age: Int)
let person: PersonTuple = ("Lee", 20)
switch person{
	case ("park", let age):
    	print("박씨이며 나이는 \(age)입니다.")
    case ("kim", let age):
    	print("김씨이며, 나이는 \(age)입니다.")
    case ("lee", _):
    	print("이씨이며, 나이는 모르겠습니다..") // 와일드카드 식별자를 이용
    @unknown case _:
    	print("누구입니까?")

와일드카드를 이용하는 것 보다 값 바인딩을 이용해 접근하는 것이 유용하다!

profile
개발자 지망생

0개의 댓글