如何检查是否在swift 3中初始化了Dictionary

时间:2016-10-28 11:00:13

标签: dictionary swift3

给定一个带有一个属性的结构 - 一个类型为<String, Any>的空字典:

struct Foo {
    var bar:Dictionary<String, Any> = [:]
}

和使用自定义初始化程序的结构扩展:

extension Foo {
    init(json: [String: Any]) {
        if let bar = json["bar"] {
            self.bar = bar as! Dictionary<String, Any>
        }
    }
}

如果bar结构上的Foo属性没有默认[:]值,我想在我的代码中进一步检查(在实例化Struct之后):

let param:Dictionary<String, Any> = ["bar": 12]
let options = Foo(param)

if (options.bar != [:]) {
    // ok, the bar is set - do something
}

param字典是用户提供的JSON对象,其必须具有类型<String, Any>,因为它可以包含eiter String:Int或String:String values。

不幸的是,上面的if声明给了我:

Binary operator '!=' cannot be applied to operands of type 'Dictionary<String, Any>' and '[AnyHashable : Any]'

1 个答案:

答案 0 :(得分:1)

使用isEmpty方法

你在这里搞错了

 if let bar = json["bar"] {
        self.bar = bar as! Dictionary<String, Any>
    }

json["bar"]返回int并转换为Dictionary类型,崩溃。

将您的扩展名更改为

extension Foo {
    init(json: [String: Any]) {

        if let _ = json["bar"] {

            self.bar = json
        }
    }
}

然后你可以检查

 let param:Dictionary<String, Any> = ["bar": 12]
 let options = Foo(json: param)

 if (options.bar.isEmpty) {
        print("empty")
  }else{
        print("not emtpy")
       }