2017-09-25 1 views
1

Mappable 프로토콜을 구현하는 클래스가 있는데이 매개 변수를 함수에 매개 변수로 전달하고 해당 개체의 인스턴스를 가져 오려고합니다. 그러나 형식도 기본 형식이 될 수 있습니다.Swift는 generic 형식에서 인스턴스화합니다.

func getInstance<T>() -> T{} 

func getInstance<T : Mappable>() -> T{} 

하지만, 더 많은 종류의 것이 무시를 많이 될 수 있습니다 내가 뭘하려

class MyMappable : Mappable { 

    required init?(map: Map) { 

     print("i am custom mappable") 
    } 
} 

func getInstance<T>() -> T{ 

    if T.self == Int.self { 

     return 10 as T 
    } 

    if T.self is Mappable.self { 
     return T(Json : [:]) //this is the problem, T is not Mappable 
    } 

} 

이 같은의 getInstance 2 재정의를 만드는 것입니다. 첫 번째 기능에서 T가 표시 가능하다는 것을 신속하게 알 수있는 방법이 있습니까?

if let MappableType = T.self as? Mappable.self { 
    return MappableType(Json : [:]) 
} 

보통 변수 이름은 소문자하지만이 경우에는 나는 그것이 형태로 사용되기 때문에 대문자를 사용하여 상상할 수 :

답변

0

당신은 조건이 (테스트되지 않은) 같은 맵핑이로 캐스팅 할 수 있습니다.

사용법/callsite에 따라 다르게 수행 할 수도 있습니다.

어떻게 getInstance<T>() -> T 방법 제약에 대해 :

getInstance<T: Mappable>() -> T

관련 문제