IOS- 20

김정현·2023년 3월 27일
0

IOS 개발공부 일지

목록 보기
20/27

타입 중첩

타입 내부에 타입을 정의하고 구현 가능한데, 이것을 중첩 타입이라고 한다.

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)과 같이쓴다.
타입캐스팅 패턴은 타입캐스팅을 하거나 타입을 매칭시킨다.

  • is 패턴은 프로그램 실행 중에 값의 타입이 is 우측에 쓰여진 타입 또는 그 타입의 자식클래스 타입이면 값과 매치시킨다. (반환된 결괏값은 신경쓰지 않는다.)
  • as 패턴은 프로그램 실행 중에 값의 타입이 as 우측에 쓰여진 타입 또는 그 타입의 자식클래스면 값과 매치시킨다. (매치된다면 매치된 값의 타입은 as 패턴이 원하는 타입을 캐스팅된다.
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 레이블에서만 사용가능하다.

  • 연산자인 ~= 연산자 결과가 true를 반환하면 매치시킨다.

제네릭과도 같이 활용 가능하다.

이해가 잘 안 돼서 나중에 다시 확인하기

0개의 댓글