2015-07-07 5 views
1

Есть ли способ определить типалиасы во время выполнения?Определить типы данных во время выполнения

В моем тестовом коде у меня есть:

typealias classType = A 
switch i { 
case 0: typealias classType = B 
case 1: typealias classType = C 
case 2: typealias classType = D 
default:typealias classType = E 
} 

Но ClassType еще быть "типа" ..

Состояние техники:

class E {} 
class A: E {} 
class B: E {} 
class C: E {} 
class D: E {} 

class Service { 
    func retrieve<T>(completion: (response: ResponseItems<T>?, error: NSError?) -> Void) {} 
} 

так, в общей части кода:

let service = Service() 

typealias classType = A 
switch i { 
case 0: typealias classType = B 
case 1: typealias classType = C 
case 2: typealias classType = D 
default:typealias classType = E 
} 
service.retrieve{ (response: ResponseItems<classType>?, error) -> Void in 

} 

Это работает, но всегда называется с типом A.

+0

Для чего вам нужно использовать 'classType'? – ABakerSmith

+0

Так вот, нет ... что именно вы пытаетесь сделать? – GoatInTheMachine

+0

взгляните на обновление .. –

ответ

1

typealias не может использоваться во время работы. Но, возможно, это помогает, это реализовано с перечислением и протоколом. Попробуйте поиграть на детской площадке

enum ClassType { 
    case ClassAType, ClassBType, ClassCType 
} 

protocol ResponseItem { 
    var getType : ClassType { get } 
} 

class ClassA: ResponseItem 
{ 
    var getType : ClassType { return .ClassAType } 
} 

class ClassB: ResponseItem 
{ 
    var getType : ClassType { return .ClassBType } 
} 

class ClassC: ResponseItem 
{ 
    var getType : ClassType { return .ClassCType } 
} 

func retrieve(response : ((ResponseItem?, NSError?) -> Void)) 
{ 
    let aType = ClassB() 
    response(aType, nil) 
} 

retrieve{ (response: ResponseItem?, error) -> Void in 
    if let classType = response { 
    switch classType.getType { 
    case .ClassAType: 
     println("ClassA") 
    case .ClassBType: 
     println("ClassB") 
    case .ClassCType: 
     println("ClassC") 
    } 
    } 
} 
+0

Я пытаюсь посмотреть, смогу ли я принять это для моей классной архитектуры .. btw nice tip, thanks! Я даю вам знать –

Смежные вопросы