2016-07-04 3 views
0

Enum Type 키의 사전 및 Box 유형에 의해 관리되는 값을 유지하고 싶습니다. 그러나 사전에있는 각 요소의 키/값을 함수에 전달하려고 할 때 유형 불일치에 대한 신속한 컴파일러 오류가 계속 발생합니다. Swift에서 generics 및 Any.Type을 함수와 함께 사용하는 방법

나는 상자이 선언이 :

final class Box<T> { 
    let value: T 

    init(value: T) { 
     self.value = value 
    } 
} 

내 사전 :

let dictionary = [Car.Nissan: Box(value: NissanHandler.Type), 
        Car.Honda: Box(value: HondaHandler.Type), 
        ...] 

NissanHandler 및 HondaHandler가 'AutoHandler'라는 이름의 프로토콜에서 상속 두 클래스됩니다. 나는 사전에 각 키/값을 열거으로

, 나는 그것을 처리하기 위해 다른 함수에 떨어져 각 요소를 전달하고 싶습니다 :

Class A { 
    func processDictionary() { 
    for (key, values) in dictionary {  
     // This line produces the error, 
     // Cannot convert value of type 'Box<CarHandler.Type>' to expected argument type '[Product : Box<Any.Type>]' 
     processElement(key, value) 
    } 
    } 

    func processElement(key: Product, value: Box<Any.Type>) { 
     // Instantiate the class based on the value's class type 
    }  
} 

가 어떻게 그래서이를 유지할 수 있습니다 내 함수를 선언해야한다 런타임에 인스턴스화해야하는 클래스 매핑?

답변

0

아마도 일반 placeholder를 기본 상자로 "전달"하는 방법일까요? 내가 제대로 이해한다면 클래스는 다음과 같이 보일 것이다 지금

func processElement<K, V>(key: K, value: V) { 

} 

을 : forEach(function)dictionary.forEach{ k, v in function(k, v)}에 대한 바로 가기임을,

final class Box<T> { 
    let value: T 

    init(_ value: T) { 
     self.value = value 
    } 
} 

class A { 
    let dictionary: [String: Box<Int>] = [ 
     "a": Box(2), 
     "b": Box(4) 
    ] 

    func processDictionary() { 
     dictionary.forEach(process) 
    } 

    func process<K, V>(key: K, box: Box<V>) { 
     print(key, box.value) 
     // a, 2 
     // b, 4 
    } 
} 

주 및 반복하는 짧은 방법입니다 그렇다면,이 코드가 도움이 될 수 있습니다 오버 키, 값 각각에 대한 함수 호출하기

Any 타입은 솔직히 말해서 내가 마지막으로 사용한 시간을 기억하지 못한다. 보통 더 좋은 방법이있다. 많은 종류의 정보 가능하다면

관련 문제