あなたの辞書はこのように宣言されているので
let apiURLS:[DataHelper : [String]]
これは、キーが type のインスタンスでなければならないことを意味しますDataHelper
。
タイプ DataHelper のインスタンスを取得するには、次のように記述できます
DataHelper()
DataHelper のサブクラスのインスタンスも有効です。
CatHelper()
DogHelper()
そう
let apiURLS:[DataHelper:[String]] = [
CatHelper(): ["abc","def"],
DogHelper(): ["ddd"],
DogHelper(): ["fff"]
]
アップデート
あなたのコメント(および更新された質問)から、辞書のキーをインスタンスではなくクラスのタイプにしたいことがわかります。
これはありえないと思うので
let apiURLS:[DataHelper.Type : [String]] = [
CatHelper.self: ["abc","def"],
DogHelper.self: ["ddd"],
DogHelper.self: ["fff"]
]
error: type 'DataHelper.Type' does not conform to protocol 'Hashable'
let apiURLS:[DataHelper.Type : [String]] = [
^
したがって、クラス型を辞書のキーとして使用することはできません。
では、別の解決策を探ってみましょう
このラッパーには、 のタイプDataHelper
またはサブクラスのタイプを含めることができますDataHelper
。
class Wrapper:Hashable, Equatable {
let value: DataHelper.Type
init(_ value:DataHelper.Type) {
self.value = value
}
var hashValue: Int { get { return "\(value)".hashValue } }
}
func ==(left:Wrapper, right:Wrapper) -> Bool {
return left.value == right.value
}
このような
Wrapper(CatHelper.self)
ラッパーは Hashable および Equatable であるため、 のキーとして使用できますDictionary
。
だから今
let apiURLS:[Wrapper : [String]] = [
Wrapper(CatHelper.self): ["abc","def"],
Wrapper(DogHelper.self): ["ddd"],
Wrapper(DogHelper.self): ["fff"]
]
反復
apiURLS
.map { ($0.0.value, $0.1) }
.forEach { (classType, strings) -> () in
classType.feed("Wow")
}