Включение общего типа?

Можно ли включить общий тип в 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'

Есть ли способ включить тип или добиться чего-то подобного? (вызов метода с общим и выполнение различных действий в зависимости от типа родового)

Ответ 1

Вам нужен шаблон is:

func doSomething<T>(type: T.Type) {
    switch type {
    case is String.Type:
        print("It a String")
    case is Int.Type:
        print("It an Int")
    default:
        print("Wot?")
    }
}

Обратите внимание, что операторы break обычно не нужны, нет "падение по умолчанию" в случаях Swift.