Универсальный геттер элементов для быстрого словаря
Скажем, у меня есть Dictionary<String, String>
, для которого я хотел бы иметь удобные геттеры для типов, реализующихStringLiteralConvertible .
let items = ["Key 1": "Value 1", "Key 2": "Value 2"]
func get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T {
if let value = items[key] {
return T(stringLiteral: value) // BUG
}
return defaultValue
}
Но что поставить на строку, помеченную комментарием к ошибке?
1 ответ:
Эта строка была фактически правильной, но строка выше должна быть более конкретной относительно того, какое значение типа будет. Попробуйте:
PS: вы, вероятно, также захотите передатьfunc get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T { if let value = items[key] as? T.StringLiteralType { return T(stringLiteral: value) } return defaultValue }
items
в качестве параметра