Я думаю, что это может быть просто ошибочным сообщением об ошибке.
Ваше расширение KeyedParameters
(typealias
для [ParameterKeys: Any]
) фактически эквивалентно:
extension Dictionary where Key == ParameterKeys, Value: Any { ...
Swift имеет странное поведение при вызове инициализатора для обобщенного типа c в объявлении самого этого типа. Если типы generi c различаются, это не будет обрабатываться должным образом.
Вот более простой пример без большого количества красных строк (псевдонимы типов, необработанные значения enum и т. Д. c.) И зависимостей:
extension Dictionary {
func returnADifferentDict() -> [Character: String] {
let words = [
"apple", "anchovies",
"bacon", "beer",
"celery"
]
return Dictionary(uniqueKeysWithValues:
words.map { ($0.first!, $0) }
)
// fixed:
// return Dictionary<Character, String>(uniqueKeysWithValues:
// words.map { ($0.first!, $0) }
// )
}
}
Решение состоит в том, чтобы явно указать параметры типа generi c для типа generi c, который вы инициализируете. В вашем случае
extension KeyedParameters {
var parameters: Parameters {
Dictionary<String, Any>(uniqueKeysWithValues: map { ($0.key.rawValue, $0.value) })
}
}