swift的下标中的泛型

Ale*_*ski 13 generics swift swift-subscript

我理解,使用Swift,您可以使用以下格式指定特定于函数的泛型:

func someFunction<T>(type: T.Type) {...}
Run Code Online (Sandbox Code Playgroud)

但是,是否有可能与下标做类似的事情?您可以在括号内指定类型,如下所示:

subscript<T>(type: T.Type) -> T {...}
Run Code Online (Sandbox Code Playgroud)

编辑:根据接受的答案更新解决方案

subscript(type: AnyClass.Type) -> Any {
    return sizeof(type)
}
Run Code Online (Sandbox Code Playgroud)

编辑2:经过测试,似乎我实际上无法使用此下标.我得到"CLASS与AnyClass.Type不同",所以我回到原点

Mik*_*e S 9

您不能将a定义subscript为泛型函数,但如果在类级别声明它,则可以使用泛型类型.

例如,假设您想创建一个类,其中包含subscript一个类型T并返回一个类型U.这看起来像是这样的:

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

例如,您可以创建一个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
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 6

通用下标现已在Swift 4中提供SE-0148