타입 중첩
타입 내부에 타입을 정의하고 구현 가능한데, 이것을 중첩 타입이라고 한다.
struct Sports {
enum GameType { //구조체 안에 열거형이 정의됨
case football, basketnall
}
struct GameInfo { //구조체 안에 구조체가 중첩 정의 됨
var time: Int
}
.
.
.
}
(위에선 GameType과 GameInfo) 이름이 같더라도 각 구조체에서 역할을 달리하고 싶을 때 사용하게 된다.
패턴
패턴은 크게 두종류로 나뉜다.
패턴은 단독 또는 복합 값의 구조를 뜻하고, 패턴 매칭은 코드에서 어떤 패턴의 형태를 찾아내는 행위이다.
와일드카드 식별자를 사용하는 것은 이 자리에 무엇이 오든 상관하지만다 라는 뜻을 내포하고 있다.
switch A {
case _: print(A) //어떤 값이 와도 항상 실행됨
}
스위치 문, for in구문에서도 사용가능하다.
() 내에 쉼표로 분리하는 리스트이다.
let (x, y): (Int, Int) = (1, 2)
옵셔널 패턴은 식별자 패턴 뒤에 물음표를 넣어 표기한다.
var a: Int? = 100
.
.
.
if case lt value? = a { //?로 옵셔널에 감싸져 있는 값을 매치시킴
print(a)
//100
is패턴은 switch의 case 레이블에서만 사용가능하다. is타입은 is (TYPE_NAME)과 같이쓰며, as패턴은 SomePattern as (TYPE_NAME)과 같이쓴다.
타입캐스팅 패턴은 타입캐스팅을 하거나 타입을 매칭시킨다.
let someValue: Any = 100
switch somValue {
case is String: print ("It's String!"} //타입을 확인하지만 캐스팅된 값을 사용할 수는없다.
case let value as Int: print(value + 1) //타입 확인과 동시에 캐스팅을 해 value에 저장한다.
default: print("Int도 String도 아닙니다.")
} //101
표현 패턴은 switch 구문의 case 레이블에서만 사용가능하다.
제네릭과도 같이 활용 가능하다.
이해가 잘 안 돼서 나중에 다시 확인하기