我正在编写extension
到Dictionary
,以便当我给它一个String
键时,只有当与键相关的值非nil且不为空时,它才会返回String
。
extension Dictionary {
subscript(key: String) -> String? {
if let string = super.subscript(key) {
if string.isEmpty == false {
return string
}
}
return nil
}
}
然而,在if let string = super.subscript(key) {
行,我得到以下编译错误,我不知道它是什么意思——也没有一个谷歌结果来解释它:
下标元素类型
期望->
我这样做是因为我正在使用一个API,它返回一个JSON,其中一个键的值可能是一个空字符串——这是一个无效的值,根据我们的要求应用程序,因此,像nil一样好。
当然,更长的路可以,但我正在寻找一种方法使它更短。
if let value = dict["key"] as? String {
if value.isEmpty == false {
// The value is non-nil and non-empty.
}
}
你会认为这是非常愚蠢的,但我的建议是:或多或少做你正在做的事情,但将其封装为一个单独的函数,而不是试图处理定义一个新的subscript
:
extension Dictionary {
func nes(key:Key) -> String? {
var result : String? = nil
if let s = self[key] as? String {
if !s.isEmpty {
result = s
}
}
return result
}
}
(nes
代表"非空字符串")
现在把它命名为d.nes("foo")