以字符串作为键和通用类作为值的字典 [英] Dictionary with String as Key and Generic Class as value

查看:182
本文介绍了以字符串作为键和通用类作为值的字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有插座和插头,插头是任何通用类型。现在我想将任何类型的插件存储到字典中。我试图用我能想到的所有方式在字典中声明插件的可能类型。没有工作。我只找到传递任何Value T的解决方案,而不是任何泛型类的类。另外我担心在任何情况下我的用词都不对。我错了什么名称?



示例将清除所有内容。
那么我如何将这个Plugs存储到套接字的字典插件中:

  import Foundation 

class AClass {

}

class BClass {

}

class Plug< T> {
init(){

}
}

类Socket {
var plugs = [String:Plug]()//应该接受任何Plug
init(){

}
func addPlug(plug:Plug){//接受任何Plug
self.plugs [A ] = plug //应该接受任何Plug


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

var socket = Socket()
socket.addPlug(plug:plugDouble ); //接受任何插件
socket.plugs [A] = plugDouble //应该接受任何插件


BasePlug ),所有 Plug c $ c>类将从中派生。让您的字典存储类 BasePlug
$ b

  class BasePlug {

}

class AClass {

}

class BClass {

}

class Plug< T> :BasePlug {

}

class Socket {
var plugs = [String:BasePlug]()//应该接受任何Plug
init() {

}
func addPlug(plug:BasePlug){//接受任何Plug
self.plugs [A] = plug //应该接受任何Plug


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

var socket = Socket()
socket.addPlug(plugDouble); //接受任何Plug
socket.plugs [A] = plugDouble //应该接受任何Plug


I have sockets and plugs, plugs are of any generic type. Now i want to store a Plug of any type into a dictionary. I tried to declare the possible type of the Plug in the dictionary in all ways i can think of. None worked. I do only find solutions for passing any Value T but not a class of any generic type. Also i fear my usage of words is not right in all cases. What did i name wrong?

Example will clear things up. So how could i store this Plugs into the dictionary "plugs" of the socket:

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

解决方案

Create a base class (let's call it BasePlug) that all Plug classes will derive from. Have your dictionary store items of 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

这篇关于以字符串作为键和通用类作为值的字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆