私はこの機能を持っています:
func flatten<Key: Hashable, Value>(dict: Dictionary<Key, Optional<Value>>) -> Dictionary<Key, Value> {
var result = [Key: Value]()
for (key, value) in dict {
guard let value = value else { continue }
result[key] = value
}
return result
}
ご覧のとおり、[Key: Value?]
辞書を辞書に変換し[Key: Value]
ます (オプションなし)。
Dictionary
値が任意の型のクラスに対してのみ新しいメソッドを使用してクラスを拡張したかったOptional
のですが、辞書の汎用パラメーターに制約を追加できません。
これは私が試したものです:
extension Dictionary where Value: Optional<Any> {
func flatten() -> [Key: Any] {
var result = [Key: Any]()
for (key, value) in self {
guard let value = value else { continue }
result[key] = value
}
return result
}
}
しかし、エラーで失敗します:
Type 'Value' constrained to non-protocol type 'Optional<Any>'