Ответ 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