신속하게 제네릭에 클래스 메타 데이터 제공 (Codable)

Zaitsman

Codables 에서 작동하는 방법이 있으며 무엇보다도 다음을 수행합니다.

func doWhatever<T>() -> T? where T: Codable {
   var myName = String(describing: T.self)
   return nil // or whatever
}

그런 다음 myName런타임에 클래스 이름을 가져와 T.

이제 이것에 Codable대한 custom이름 을 제공해야합니다 .

그래서 내가 some protocol제공하는 이름 을 따르기 위해 내 모든 코드 (수백 개의 모델)를 편집 할 수 있지만 , 나는 정말로 그것을 피하고 싶다.

Swift에는 사용자 정의 속성이 없기 때문에 이것을 조합했습니다.

protocol MetadataProvidingCodable {
    static func customName() -> String
}

그런 다음 내 일반에서 다음을 T준수 하는지 확인할 수 있습니다 .

func doWhatever<T>() -> T? where T: Codable {
   var myName = String(describing: T.self)
   if T.self is MetadataProvidingCodable.Type {
      myName = ... // Get customName() from T without an instance???
   }

   return nil // or whatever
}

하지만 내 문제는 T인스턴스가 없어도 유형 에 대해 정적 func를 호출 할 수 있어야한다는 것 입니다 T. 가능합니까?

gcharita

다음 T.selfMetadataProvidingCodable.Type같이 캐스트를 입력 할 수 있습니다 .

func doWhatever<T>() -> T? where T: Codable {
    var myName = String(describing: T.self)
    if let type = T.self as? MetadataProvidingCodable.Type {
        myName = type.customName()
    }

    return nil // or whatever
}

편집 : 어떻게 든 공통 논리를 별도의 함수로 옮길 수 있다면 doWhatever()모두를 준수하는 유형을 반환하는 다른 함수로 함수를 재정의 할 수 있습니다 .CodableMetadataProvidingCodable

그런 다음 컴파일러는 반환 유형에 따라 어떤 함수가 호출되는지 알아냅니다.

func doWhatever<T>() -> T? where T: Codable {
    print("doWhatever: Codable")
    var myName = String(describing: T.self)
    return nil
}

func doWhatever<T>() -> T? where T: Codable & MetadataProvidingCodable {
    print("doWhatever: Codable & MetadataProvidingCodable")
    var myName = T.customName()
    return nil
}

struct Example1: Codable {}
struct Example2: Codable, MetadataProvidingCodable {
    static func customName() -> String {
        return "Example2"
    }
}

let example1: Example1? = doWhatever()
let example2: Example2? = doWhatever()

// prints
// doWhatever: Codable
// doWhatever: Codable & MetadataProvidingCodable

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

런타임에 결정되는 <T> 형식을 전달하는 제네릭 클래스로 제네릭 인터페이스 캐스팅

분류에서Dev

코 틀린와 제네릭 클래스에 게터 (또는 메서드 나 속성) 목록 얻기

분류에서Dev

제네릭 메서드에서 클래스 별 속성 처리

분류에서Dev

데코레이터가 클래스가 아닌 인터페이스에 종속되는 비 제네릭 인터페이스로 클래스 데코레이션

분류에서Dev

제네릭 유형이 1 개인 클래스에서 제네릭 유형이 2 개인 메서드

분류에서Dev

제네릭 클래스 유형 제약이있는 제네릭 메서드

분류에서Dev

C # 제네릭 확장 메서드를 사용하여 컬렉션이 아닌 클래스에서 작동

분류에서Dev

제네릭 클래스에서 정적 메서드를 사용하는 해결 방법이 있습니까?

분류에서Dev

JAVA의 제네릭 클래스에서 오버라이드 메서드를 사용하는 방법

분류에서Dev

Gson 직렬화 : 제네릭 클래스 및 제네릭 데이터를 내부에 캐스팅하는 방법은 무엇입니까?

분류에서Dev

어떻게 제네릭 자바 클래스 리터럴의 타이프 라이터 아날로그에서 만들어?

분류에서Dev

제네릭 클래스에서 Iterable <> 메서드를 구현하는 방법

분류에서Dev

기본 클래스에서 제네릭 메서드를 호출하는 FSharp

분류에서Dev

유형이 기본 클래스를 공유하지 않는 제네릭 유형에 의한 다형성

분류에서Dev

제약 조건이있는 C # 상속 제네릭 클래스

분류에서Dev

Typescript 타이핑, 제네릭 및 추상 클래스

분류에서Dev

제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

분류에서Dev

타입 클래스 제네릭의 타입 클래스 제약

분류에서Dev

인터페이스에서 제네릭을 사용하여 메서드 반복

분류에서Dev

이 제네릭 클래스를 어떻게 변경하여 주요 메소드가 작동합니까?

분류에서Dev

제네릭 인터페이스의 비 제네릭 클래스 구현은 상속되지 않습니다.

분류에서Dev

제네릭이 아닌 자식을 통해 부모 클래스에서 제네릭 메서드에 올바르게 액세스하는 방법은 무엇입니까?

분류에서Dev

제네릭 유형 인스턴스를 가져 오지 않는 제네릭 메서드 내에서 구체적인 클래스 속성 읽기

분류에서Dev

하위 클래스의 제네릭이있는 하위 클래스

분류에서Dev

제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

분류에서Dev

제네릭 속성이있는 C # 클래스

분류에서Dev

제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

분류에서Dev

제네릭 인터페이스를 구현하는 클래스의 제네릭 유형 정의 쿼리

분류에서Dev

메서드에서 제네릭 클래스를 반환하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    런타임에 결정되는 <T> 형식을 전달하는 제네릭 클래스로 제네릭 인터페이스 캐스팅

  2. 2

    코 틀린와 제네릭 클래스에 게터 (또는 메서드 나 속성) 목록 얻기

  3. 3

    제네릭 메서드에서 클래스 별 속성 처리

  4. 4

    데코레이터가 클래스가 아닌 인터페이스에 종속되는 비 제네릭 인터페이스로 클래스 데코레이션

  5. 5

    제네릭 유형이 1 개인 클래스에서 제네릭 유형이 2 개인 메서드

  6. 6

    제네릭 클래스 유형 제약이있는 제네릭 메서드

  7. 7

    C # 제네릭 확장 메서드를 사용하여 컬렉션이 아닌 클래스에서 작동

  8. 8

    제네릭 클래스에서 정적 메서드를 사용하는 해결 방법이 있습니까?

  9. 9

    JAVA의 제네릭 클래스에서 오버라이드 메서드를 사용하는 방법

  10. 10

    Gson 직렬화 : 제네릭 클래스 및 제네릭 데이터를 내부에 캐스팅하는 방법은 무엇입니까?

  11. 11

    어떻게 제네릭 자바 클래스 리터럴의 타이프 라이터 아날로그에서 만들어?

  12. 12

    제네릭 클래스에서 Iterable <> 메서드를 구현하는 방법

  13. 13

    기본 클래스에서 제네릭 메서드를 호출하는 FSharp

  14. 14

    유형이 기본 클래스를 공유하지 않는 제네릭 유형에 의한 다형성

  15. 15

    제약 조건이있는 C # 상속 제네릭 클래스

  16. 16

    Typescript 타이핑, 제네릭 및 추상 클래스

  17. 17

    제네릭 메서드에 제네릭 클래스 객체 보내기 (Java)

  18. 18

    타입 클래스 제네릭의 타입 클래스 제약

  19. 19

    인터페이스에서 제네릭을 사용하여 메서드 반복

  20. 20

    이 제네릭 클래스를 어떻게 변경하여 주요 메소드가 작동합니까?

  21. 21

    제네릭 인터페이스의 비 제네릭 클래스 구현은 상속되지 않습니다.

  22. 22

    제네릭이 아닌 자식을 통해 부모 클래스에서 제네릭 메서드에 올바르게 액세스하는 방법은 무엇입니까?

  23. 23

    제네릭 유형 인스턴스를 가져 오지 않는 제네릭 메서드 내에서 구체적인 클래스 속성 읽기

  24. 24

    하위 클래스의 제네릭이있는 하위 클래스

  25. 25

    제네릭 + 공용체 유형 [Typescript]를 사용하여 클래스에서 추상 메소드를 구현할 때 유형 안전성 문제

  26. 26

    제네릭 속성이있는 C # 클래스

  27. 27

    제네릭 클래스를 기반으로 제네릭 인터페이스를 정의하는 방법

  28. 28

    제네릭 인터페이스를 구현하는 클래스의 제네릭 유형 정의 쿼리

  29. 29

    메서드에서 제네릭 클래스를 반환하려면 어떻게해야합니까?

뜨겁다태그

보관