切换泛型类型?

问题描述 投票:0回答:2

是否可以在 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;
    }
}

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

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'

有没有办法切换类型,或者实现类似的效果? (使用泛型调用方法并根据泛型的类型执行不同的操作)

swift generics
2个回答
67
投票

您需要

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?")
    }
}

注意,

break
语句通常是不需要的,没有 Swift 情况下的“默认失败”。


0
投票

不需要传递类型,你已经知道了:

func doSomething<T>() {
    switch T.self {
    case is String.Type:
        // Do something
    case Int.Type:
        // Do something
    default:
        // Do something
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.