如何扩展Swift Dictionary类型以返回非空String或nil

时间:2015-05-21 17:16:30

标签: ios swift cocoa cocoa-touch foundation

我正在向MonoMethodDesc* typeDesc = mono_method_desc_new("EnumTest.EnumClass:SetType(EnumClass/HelloType)", false); MonoMethod* typeMethod = mono_method_desc_search_in_class(typeDesc, enumClass); extension,以便在我提供Dictionary密钥时,只有String才会给我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) {行,我收到以下编译错误,我不知道这意味着什么 - Google的结果也没有解释它:

  

下标元素类型的预期->

我这样做是因为我正在使用返回JSON的API,其中键的值可能是空字符串 - 这是我们的要求对应用程序的无效值,因此,和零一样好。

当然,漫长的路可行,但我正在寻找一种简化方法。

if let value = dict["key"] as? String {
    if value.isEmpty == false {
        // The value is non-nil and non-empty.
    }
}

1 个答案:

答案 0 :(得分:1)

你会认为这是非常愚蠢的,但我的建议是:或多或少地做你正在做的事情,但将其封装为一个单独的功能,而不是试图处理定义一个新的含义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")