一尘不染

开启通用类型?

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;
    }
}

尝试使用上面的代码时,出现以下错误:

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'

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


阅读 222

收藏
2020-07-07

共1个答案

一尘不染

您需要以下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情况下没有“默认失败”。

2020-07-07