Swift 从字典下标方法返回值

Swift 从字典下标方法返回值,swift,Swift,我正在使用Swift 4编程语言的一些新功能。出于某种原因,它在下面的代码中抱怨,我返回self[key]值 extension Dictionary { subscript<T>(key :String, type :T) -> T? { get { return self[key] as? T // this line } } } 扩展字典{ 下标(键:String,类型:T)->T{ 得到{ 将s

我正在使用Swift 4编程语言的一些新功能。出于某种原因,它在下面的代码中抱怨,我返回self[key]值

extension Dictionary {

    subscript<T>(key :String, type :T) -> T? {
        get {
            return self[key] as? T // this line
        }
    }
}
扩展字典{
下标(键:String,类型:T)->T{
得到{
将self[key]返回为?T//此行
}
}
}
我的游乐场。游乐场:1:5:注意:找到此候选人

subscript<T>(key :String, type :T) -> T? {
下标(键:字符串,类型:T)->T?{
你知道我做错了什么吗

更新

extension Dictionary {

    subscript<T>(key :Key) -> T? {
        return self[key] as? T
    }
}

struct Pokemon {
    var title :String
}

let pokemon = Pokemon(title: "Pikachu")

var dictionary = [String:Any]()
dictionary["foo"] = "hello world"
dictionary["pokemon"] = pokemon

let p = dictionary["pokemon"] // this calls the default subscript not mine
扩展字典{
下标(key:key)->T{
将self[key]返回为?T
}
}
结构口袋妖怪{
变量标题:字符串
}
让口袋妖怪=口袋妖怪(标题:“皮卡丘”)
变量字典=[String:Any]()
字典[“foo”]=“你好,世界”
字典[“口袋妖怪”]=口袋妖怪
让p=dictionary[“pokemon”]//这会调用默认的下标,而不是我的

并非所有字典都有
字符串
键;)这是真的!但我不是在创建另一个以字符串为键的下标函数。但是您尝试实现的下标采用
字符串
键–您的意思是
。比较一下。您可能还想让
类型
参数采用
T.Type
。如果您显式地将
p
注释为
Any
以外的内容,则应该调用您的下标。但实际上,这是对字典API的一个非常不明确的添加,我将使用显式的
类型:
参数保留它。此外,我怀疑您的下标实现将无限递归。