我正在制作一个农场,所有可以种植的东西都符合 Growable 协议。当你种植植物时,你调用这个函数:
myFarm.planting<T: Growable>(qty: Int, of: T.Type) -> Farm
现在我希望 Farm 的每个实例都有一个字典实例 var,例如:
var crops = [Growable.Type: Int]
问题是,即使我让 Growable 协议继承了 Hashable,这也无助于 Growable类型变成 Hashable。
换句话说,即使我像这样向 Growable 添加扩展:
extension Growable {
static func hashValue {
// return some hash
}
}
... Growable类型仍然不是 Hashable,因为 Hashable 协议只涉及类型的实例,而不涉及类型本身。
好吧,通常我会放弃并说,“我很愚蠢,不要再尝试这个了。”
然而这是 Swift,所以我认为必须有一种方法可以让语言符合我的意愿,无论是通过创建一个新的 StaticHashable 协议,然后使用接受此协议的新下标方法扩展 Dictionary 类型,还是通过修改 Swift 的源代码本身和然后向进化列表提出建议。
但在我走上这两条路之前,我认为明智的做法是问问各位天才,是否已经有一种方法可以做我想做的事,或者这样做是否非常愚蠢,你会向我展示我以前的明显优越的方法一直以某种方式错过了令人难以置信的愚蠢。
注意:我的观点是类型本身应该能够静态地遵守其功能未声明为静态的协议,因为消息的发送者为什么要关心响应的实体是不朽的上帝还是短暂的生物,在某些神的形象?