제네릭 클래스 및 서브 클래 싱 배열

코코넛

제네릭으로 머리를 감싸는 데 문제가 있습니다. 내가 원하는 것은 각각 고유 한 관련 유형을 가진 제네릭 클래스 배열을 갖고 그에 따라 함수를 호출하는 것입니다. 다음과 같이 보일 것입니다.

class SomeGenericClass<U> {
    func addCallback(callback: (U)->() ) { ... }
}

var array: [SomeGenericClass] // compile error

마지막 줄에서 오류가 발생하므로 수퍼 클래스가 필요하다는 것을 알았습니다. 나는 다음과 같이 시도했다.

class SuperClass {
    func addCallback<V>(callback: (V)->() ) { ... }
}

class SomeGenericClass<U> {
    func addCallback<V: U>(callback: (V)->() ) { ... } // compile error
}

var array: [SuperClass] // no compile error

이로 인해 오류가 발생 Type 'V' constrained to non-protocol, non-class type 'U'합니다.

기본적으로 할 수 있기를 원합니다.

array.append(SomeGenericClass<UIImage>()) // array[0]
array.append(SomeGenericClass<Int>()) // array[1]

// Since array[0] is effectively of type SomeGenericClass<UIImage>, the compiler should understand that the close added if of type (UIImage)->(), and therefore that value is of type UIImage
array[0].addCallback { value in
   someImageView.image = value
}

이 경우 슈퍼 클래스를 사용하는 것이 올바른 접근 방식입니까? 어떻게 구현해야합니까?

코코넛

배열 멤버를 자체 변수에 저장하여이 문제를 해결했습니다. 즉, 내 배열을 다음과 같이 정의하는 대신 :

lazy var array: [SuperClass] = [
    SomeGenericClass<UIImage>(),
    SomeGenericClass<Int>(),
    //etc...
]

나는 이것을 이렇게 정의했습니다.

lazy var genericFirst: SomeGenericClass<UIImage> = SomeGenericClass<UIImage>()
lazy var genericSecond: SomeGenericClass<Int> = SomeGenericClass<Int>()
// etc...

lazy var array: [SuperClass] = [
    genericFirst,
    genericSecond,
    //etc...
]

이렇게하면 다음과 같이 원하는 제네릭에 액세스 할 수 있습니다.

genericFirst.addCallback { value in
    // value is indeed of type UIImage
    someImageView.image = value
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

서브 클래 싱 및 제네릭

분류에서Dev

다른 클래스를 확장하는 배열 및 제네릭 클래스 : typescript에서 가능합니까?

분류에서Dev

네이티브 내보내기 클래스 및 싱글 톤 메서드 반응

분류에서Dev

서브 클래 싱 된 LinearLayout 클래스 서브 클래 싱

분류에서Dev

UIPickerView 서브 클래 싱 및 UIToolbar 추가

분류에서Dev

InputStream 및 OutputStream 모두 서브 클래 싱

분류에서Dev

QStateMachine 서브 클래 싱 및 수정

분류에서Dev

서브 클래스 및 제네릭을 사용한 양방향 다 대일

분류에서Dev

클래스의 제네릭 및 메서드 양

분류에서Dev

경량 제네릭 및 클래스 메서드

분류에서Dev

Swift 클래스의 제네릭에서 프로토콜 배열 사용

분류에서Dev

서브 클래 싱 된 배열의 길이

분류에서Dev

내가 서브 클래 싱중인 클래스에서 Swift의 제네릭 유형을 어떻게 반환합니까?

분류에서Dev

제네릭 클래스에서 Java 제네릭 클래스 인스턴스화

분류에서Dev

Kotlin에서 제네릭 클래스를 동일한 클래스의 제네릭 배열에 매핑하는 방법

분류에서Dev

Scala는 서브 클래 싱 된 제네릭 함수에서 유형 정보를 제공합니다.

분류에서Dev

NSManagedObject의 서브 클래스 서브 클래 싱

분류에서Dev

iOS의 싱글 톤 클래스에서 배열 사용

분류에서Dev

UITableView 서브 클래 싱

분류에서Dev

서브 클래 싱 버튼

분류에서Dev

UIAlertController 서브 클래 싱

분류에서Dev

UICollectionView 서브 클래 싱

분류에서Dev

SCNNode 서브 클래 싱

분류에서Dev

비 제네릭 클래스의 제네릭 클래스 메서드

분류에서Dev

C # 제네릭, 여기서 T 클래스 : (상속 클래스)

분류에서Dev

제네릭 유형을 서브 클래스로 캐스팅

분류에서Dev

SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

분류에서Dev

UITableViewCell 서브 클래 싱 및 iOS에서 자체 기능 추가

분류에서Dev

메서드 서브 클래 싱 및 재정의

Related 관련 기사

  1. 1

    서브 클래 싱 및 제네릭

  2. 2

    다른 클래스를 확장하는 배열 및 제네릭 클래스 : typescript에서 가능합니까?

  3. 3

    네이티브 내보내기 클래스 및 싱글 톤 메서드 반응

  4. 4

    서브 클래 싱 된 LinearLayout 클래스 서브 클래 싱

  5. 5

    UIPickerView 서브 클래 싱 및 UIToolbar 추가

  6. 6

    InputStream 및 OutputStream 모두 서브 클래 싱

  7. 7

    QStateMachine 서브 클래 싱 및 수정

  8. 8

    서브 클래스 및 제네릭을 사용한 양방향 다 대일

  9. 9

    클래스의 제네릭 및 메서드 양

  10. 10

    경량 제네릭 및 클래스 메서드

  11. 11

    Swift 클래스의 제네릭에서 프로토콜 배열 사용

  12. 12

    서브 클래 싱 된 배열의 길이

  13. 13

    내가 서브 클래 싱중인 클래스에서 Swift의 제네릭 유형을 어떻게 반환합니까?

  14. 14

    제네릭 클래스에서 Java 제네릭 클래스 인스턴스화

  15. 15

    Kotlin에서 제네릭 클래스를 동일한 클래스의 제네릭 배열에 매핑하는 방법

  16. 16

    Scala는 서브 클래 싱 된 제네릭 함수에서 유형 정보를 제공합니다.

  17. 17

    NSManagedObject의 서브 클래스 서브 클래 싱

  18. 18

    iOS의 싱글 톤 클래스에서 배열 사용

  19. 19

    UITableView 서브 클래 싱

  20. 20

    서브 클래 싱 버튼

  21. 21

    UIAlertController 서브 클래 싱

  22. 22

    UICollectionView 서브 클래 싱

  23. 23

    SCNNode 서브 클래 싱

  24. 24

    비 제네릭 클래스의 제네릭 클래스 메서드

  25. 25

    C # 제네릭, 여기서 T 클래스 : (상속 클래스)

  26. 26

    제네릭 유형을 서브 클래스로 캐스팅

  27. 27

    SKSpriteNode의 적절한 서브 클래 싱 및 인스턴스 초기화

  28. 28

    UITableViewCell 서브 클래 싱 및 iOS에서 자체 기능 추가

  29. 29

    메서드 서브 클래 싱 및 재정의

뜨겁다태그

보관