打开通用类型?

Jac*_*don 20 generics swift

是否可以在Swift中打开泛型类型?

这是我的意思的一个例子:

func doSomething<T>(type: T.Type) {
    switch type {
    case String.Type:
        // Do something
        break;
    case Int.Type:
        // Do something
        break;
    default:
        // Do something
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试使用上面的代码时,我收到以下错误:

Binary operator '~=' cannot be applied to operands of type 'String.Type.Type' and 'T.Type'
Binary operator '~=' cannot be applied to operands of type 'Int.Type.Type' and 'T.Type'
Run Code Online (Sandbox Code Playgroud)

有没有办法打开一个类型,或实现类似的东西?(根据泛型的类型调用具有泛型的方法并执行不同的操作)

Mar*_*n R 31

你需要这个is模式:

func doSomething<T>(type: T.Type) {
    switch type {
    case is String.Type:
        print("It's a String")
    case is Int.Type:
        print("It's an Int")
    default:
        print("Wot?")
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,break通常不需要语句,Swift案例中没有"默认的突破".

  • 使用 `switch type` 时我收到一个奇怪的警告,但是 `switch T.self` 工作得很好。谢谢! (3认同)
  • @jackwilsdon:很奇怪,我在Xcode 7.0.1中测试了它并没有得到任何警告. (2认同)