티스토리 뷰

카테고리 없음

some 과 any

Chasomin 2024. 4. 9. 16:03

some

역제네릭타입, opaqueType, 불투명한 타입

✅ 역제네릭 타입

구현할 당시에 타입을 안다

✅ 제네릭: 타입 파라미터

구현할 당시에는 타입을 모른다

사용할 때(함수 호출과 같은) 타입이 구체적으로 지정.

var body: Text {
    get {
        Text("")
    }
}

SwiftUI에서 body는 연산프로퍼티 (get이 생략되어 있는 형태이다.)

연산프로퍼티는 항상 타입을 명시해줘야한다.

하지만 boby 안에 항상 Text 타입만 존재하진 않을 것이다.

var body: Text { //❗️타입 오류 발생
    HStack {
        
    }
}

 

이렇게 내부가 바뀔때마다 바뀐 타입을 명시해줘야하는데 쉽지 않다...

var body: some View {
    HStack {
        
    }
}

⇒ some View 타입을 사용해준다.

View 프로토콜을 준수하는 어떤 타입이든 들어올 수 있게 되었다!

 

any

some은 타입을 제한

-- some은 배열의 element 타입이 모두 동일해야하고

any는 타입을 추상화 (Type Erasure)

-- any는 달라도 괜찮다

protocol Type {}

struct A: Type {}
struct B: Type {}

func testSome() -> [some Type] {
    return [A(), B()]	 // ⚠️ 에러
}

func testAny() -> [any Type] {
    return [A(), B()]
}

some을 우선적으로 사용하고 any가 필요한 경우만 any를 사용하는 것을 권장한다고 한다.

( let으로 선언하고 값이 변할 때만 var로 바꾸는 것 처럼 )

댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함