辞書を拡張し、型の値を持つ NSDate の特定のキー型に制約したいArray<MyClass>
MyClass は、サブクラスのない迅速なクラスです。
extension Dictionary where Key: NSDate, Value: Array<MyClass>{
func myFunction() -> Int{
// Some thing useful
}
}
上記のコードはビルド エラーを返します。
非プロトコル型「配列」に制限された型「値」
わかりましたので、特定のプロトコルに制約する必要があるようですが、奇妙なことに、値を次のように制約すると十分です。
拡張ディクショナリ、キー: NSDate、値: MyClass
コンパイラは文句を言わず、ビルドは成功します。しかし MyClass はプロトコルではありません。それで、何が得られますか?
私はそれを次のように制限することができました:
extension Dictionary where Key: NSDate, Value: CollectionType, Value.Generator.Element: MyClass{
func myFunction() -> Int{
var count = 0
for (_, graphicItemArray) in self{
count+= (graphicItemArray as! [MyClass]).count
}
return count
}
}
ただし、count プロパティを整数形式で取得する必要があるため、これには強制キャストが必要です。
では、 [MyClass] の値の型に明示的に制約できないのはなぜですか?