我正在建造一個農場,所有可以種植的東西都符合Growable協議。當你種的植物,你可以調用這個FUNC:是否可以在Swift中使用Type作爲字典鍵?
myFarm.planting<T: Growable>(qty: Int, of: T.Type) -> Farm
現在我想農場的每個實例有一個字典實例變種,如:
var crops = [Growable.Type: Int]
的問題是,即使我使可擴展協議繼承Hashable,這不利於Growable 類型成爲Hashable。
換句話說,即使我添加的擴展,可擴展的是這樣的:
extension Growable {
static func hashValue {
// return some hash
}
}
...仍然可增長型不是哈希的,因爲哈希的協議只涉及的類型實例但不是類型本身。
哦,通常我會放棄,說:「我笨,不會進一步嘗試這個。」
然而,這是斯威夫特,所以我想一定有彎曲的語言我的意志的方式,不管是通過製作一個新的StaticHashable協議,然後用一個新的下標方法來擴展Dictionary類型,或者通過修改Swift的源代碼本身,然後對Evolution列表進行調整。
但是,在我走下這兩條路之前,我認爲問問你天才是否明智,如果已經有辦法做我想做的事,或者做這件事是否令人難以置信的愚蠢,你會向我展示明顯優越的這種方法令我難以置信地不知何故錯過了。
注意:我的意見是,類型本身應該能夠靜態地遵守其funcs沒有被聲明爲靜態的協議,因爲爲什麼消息的發送者應該關心響應的實體是不朽的上帝還是臨時的生物,是以上帝的形象造的?
是的,這是我會做的。我現在很喜歡擴展字典,除了我可能會嘗試製作更通用的StaticHashable協議並在擴展中執行'return index.hashValue'。我真正喜歡的是類型與某些級別的實例無法區分......也許是Swift 5 heh。 – CommaToast