*현재 작성중인 문서입니다.
열거형 케이스 패턴, 옵셔널 패턴, 타입캐스팅 패턴, 표현 패턴
은 차후 작성할 계획입니다.
,를 사용해 여러개 지정
//무작위로 0~10 사이의 숫자를 지정합니다.
let ranNum = Int.random(in: 0...10)
switch ranNum {
case 1,3,5,7,9:
print( "홀수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
case 2,4,6,8,10:
print( "짝수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
case 0:
print( "0를 뽑았습니다." )
default:
print("unknown error")
}
범위연산자 사용
//무작위로 0~10 사이의 숫자를 지정합니다.
let ranNum = Int.random(in: 0...10)
switch ranNum {
case 0..<3:
print( "작은 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
case 3..<6:
print( "적당한 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
case 6..<11:
print( "큰 수를 뽑았습니다. 뽑은 숫자는\(ranNum) 입니다." )
default:
print("unknown error")
}
튜플 패턴
func makePoint() ->Int{
var a = Int.random(in: 0...2)
var b = Int.random(in: 0...2)
return a-b
}
let x = makePoint()
let y = makePoint()
// _는 어느 값이든 상관없을때 사용하는 와일드카드 패턴입니다.
switch x, y{
case (0, 0):
print( "(\(x), \(y) )는 원점입니다." )
case (_, 0):
print( "(\(x), \(y) )는 x축에 닿아 있습니다. " )
case (0, _):
print( "(\(x), \(y) )는 y축에 닿아 있습니다." )
case (-2...2, -2...2):
print( "(\(x), \(y) )는 어느축에도 닿지 않습니다.")
default:
print( "unkown error" )
}
//직접 튜플을 만들어서 넣어봤습니다.
func makePointTule() ->(Int,Int){
var a = Int.random(in: 0...2)
var b = Int.random(in: 0...2)
return (a-b, a+b)
}
switch makePointTule(){
case (0, 0):
print( "\( makePointTule() )는 원점입니다." )
case (_, 0):
print( "\( makePointTule() )는 y축에 닿아 있습니다. " )
case (0, _):
print( "\( makePointTule() ) x축에 닿아 있습니다." )
case (-2...2, -2...2):
print("\( makePointTule() )는 어느축에도 닿지 않습니다.")
default:
print( "unkown error" )
}
벨류 바인딩 패턴
switch문에 튜플을 사용할때 벨류 바인딩 패턴을 사용할 수 있습니다.
명명된 변수 또는 상수를 일치하는 값에 바인딩합니다.
func getPoint(point:(Int,Int)){
switch point{
case (0, 0):
print( "\(getPoint) 는 원점입니다." )
case (let x, 0):
print( "점은 y축에 닿아 있으며, x값은 \(x) 입니다." )
case (0, let y):
print( "점은 x축에 닿아 있으며, y값은 \(y) 입니다." )
case (let x, let y):
print("(\(x), \(y))는 어느축에도 닿지 않습니다.")
default:
print( "error" )
}
}
getPoint(point:(3,0)) //점은 y축에 닿아 있으며, x값은 3 입니다.
getPoint(point:(0,3)) //점은 x축에 닿아 있으며, y값은 3 입니다.
getPoint(point:(3,3)) //(3, 3)는 어느축에도 닿지 않습니다.
개인적으로 이해가 한참 안되서 한참을 이리저리 해봤네요.ㅠㅠ
말로 조금 풀어서 설명하자면, g
getPoint(3, 0) 이면 case (let x, 0) 케이스에 해당되고, lex x = 3으로 바인딩된다는 얘기입니다.
getPoint(0, 3) 이면 case( 0, let y)에 걸리게 되고, let y = 3으로 바인딩되며,
getPoint(3, 3)이면 case (let x, let y)에 걸려 let x = 3, let y =3으로 바인딩됩니다.
이렇게 바인딩을 하면 내부에서 자체생성한 변수를 사용할 수 있죠.
참고로, 바인딩은 프로그램의 각종 변수값들이 실제 값으로 묶는 것입니다. ㅎㅎ..
where절 사용 패턴
where문을 추가해 조건을 더욱 세분화 할 수 있습니다.
위의 벨류바인딩 패턴도 같이 사용해보겠습니다.
where절은 패턴과 결합하여 조건을 추가하거나
타입에 대한 제약을 추가하는 용도로 사용됩니다.
func wherePoint(point:(Int,Int)){
switch point{
case let (x, y) where x == y:
print( " ( \(x), \(y) )는 x=y 직선상의 점입니다. " )
case let (x, y) where x == -y:
print( " ( \(x), \(y) )는 x=-y 직선상의 점입니다. " )
default:
print( "점들은 좌표평면 어딘가에 있습니다" )
}
}
wherePoint(point:(3,3)) //( 3, 3 )는 x=y 직선상의 점입니다.
wherePoint(point:(1,-1)) //( 1, -1 )는 x=-y 직선상의 점입니다.
wherePoint(point:(2,3)) //점들은 좌표평면 어딘가에 있습니다
작성예정{
열거형 케이스 패턴
옵셔널 패턴
타입캐스팅 패턴
표현 패턴
}
공부에 도움을 준 웹페이지들
apple 공식 문서
switch-case문 예제
https://www.hohyeonmoon.com/blog/swift-switch-case/
더 다양한 패턴
https://blog.naver.com/PostView.nhn?blogId=taerg89&logNo=221724132490
'Language > Swift' 카테고리의 다른 글
Swift 옵셔널 (0) | 2021.03.11 |
---|---|
Swift 반복문 (0) | 2021.03.10 |
Swift의 조건문 (0) | 2021.03.09 |
Swift 함수 고급 (0) | 2021.03.09 |
Swift 간단한 사칙연산 (0) | 2021.03.09 |