如何扩展Swift Dictionary类型以返回非空字符串或nil



我正在编写extensionDictionary,以便当我给它一个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")

最新更新