以字符串为键、通用 Class 为值的字典

Dictionary with String as Key and Generic Class as value

我有插座和插头,插头是任何通用类型的。现在我想将任何类型的插头存储到字典中。我试图以我能想到的所有方式在字典中声明插件的可能类型。 None 成功了。我只找到传递任何值 T 的解决方案,而不是任何泛型类型的 class。我也担心我的用词在所有情况下都不正确。我说错了什么?

例子会把事情搞清楚。 那么我如何将这个插件存储到套接字的字典 "plugs" 中:

import Foundation

class AClass {

}

class BClass {

}

class Plug<T> {
    init() {

    }
}

class Socket {
    var plugs = [ String: Plug ]() // should accept any Plug
    init() {

    }
    func addPlug( plug : Plug ) { // should accept any Plug
        self.plugs["A"] = plug // should accept any Plug
    }
}

var plugDouble = Plug<Double>()
var plugString = Plug<String>()
var plugAClass = Plug<AClass>()
var plugBClass = Plug<BClass>()

var socket = Socket()
socket.addPlug(plug: plugDouble ); // should accept any Plug
socket.plugs["A"] = plugDouble // should accept any Plug

创建一个基础 class(我们称之为 BasePlug),所有 Plug classes 都将派生自该基础。让你的字典存储 class BasePlug:

的项目
class BasePlug {

}

class AClass {

}

class BClass {

}

class Plug<T> : BasePlug {

}

class Socket {
    var plugs = [ String: BasePlug ]() // should accept any Plug
    init() {

    }
    func addPlug( plug : BasePlug ) { // should accept any Plug
        self.plugs["A"] = plug // should accept any Plug
    }
}

var plugDouble = Plug<Double>()
var plugString = Plug<String>()
var plugAClass = Plug<AClass>()
var plugBClass = Plug<BClass>()

var socket = Socket()
socket.addPlug(plugDouble ); // should accept any Plug
socket.plugs["A"] = plugDouble // should accept any Plug