Swift 词典的通用项目 getter
Generic item getter for a Swift dictionary
假设我有一个 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
}
但是在有BUG评论的那一行放什么?
该行实际上是正确的,但上面的行应该更具体地说明值的类型。尝试:
func get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T {
if let value = items[key] as? T.StringLiteralType {
return T(stringLiteral: value)
}
return defaultValue
}
PS:您可能还想将 items
作为参数传递
假设我有一个 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
}
但是在有BUG评论的那一行放什么?
该行实际上是正确的,但上面的行应该更具体地说明值的类型。尝试:
func get<T: StringLiteralConvertible>(key: String, _ defaultValue: T) -> T {
if let value = items[key] as? T.StringLiteralType {
return T(stringLiteral: value)
}
return defaultValue
}
PS:您可能还想将 items
作为参数传递