Подтвердить что ты не робот

Общий для индекса для быстрого

Я понимаю, что с помощью Swift вы можете указать специфичный для функции общий вид с помощью этой формы:

func someFunction<T>(type: T.Type) {...}

Однако возможно ли что-то подобное с индексами? Где вы можете указать тип в скобках так:

subscript<T>(type: T.Type) -> T {...}

EDIT: Обновленное решение на основе принятого ответа

subscript(type: AnyClass.Type) -> Any {
    return sizeof(type)
}

РЕДАКТИРОВАТЬ 2: После тестирования кажется, что я не могу использовать этот индекс. Я получаю "CLASS не идентичен AnyClass.Type", поэтому я возвращаюсь к квадрату.

4b9b3361

Ответ 1

Вы не можете определить subscript как общую функцию, но вы можете использовать общий тип, если он объявлен на уровне класса.

Например, скажем, вы хотите создать класс, в котором subscript принимает тип T и возвращает тип U. Это выглядит примерно так:

class SomeClass<T, U> {
    subscript(someParameter: T) -> U {
        /* something that returns U */
    }
}

Например, вы можете создать класс Converter, который использовал функцию subscript для преобразования из типа T в тип U:

Примечание: Это очень надуманный пример, я обычно не делал этого таким образом.

class Converter<T, U> {
    var _converter: (T -> U)

    init(converter: (T -> U)) {
        _converter = converter
    }

    subscript(input: T) -> U {
        let output = _converter(input)
        return output
    }
}

var convert = Converter(converter: {
    (input: Int) -> String in
    return "The number is: \(input)"
})

let s = convert[1]
println(s) // The number is: 1

Ответ 3

Я не думаю, что это возможно. Вместо этого вы можете использовать Any или AnyObject и вернуть результат функции обратно указанному типу.

subscript(type: AnyObject) -> AnyObject {
    ...
}

Совет. Вместо type: T.Type используйте type: T.