2016-10-28 40 views
0

给定结构有一个属性初始化 - <String, Any>类型的空字典:如何检查是否词典在SWIFT 3

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

和结构的扩展与自定义initalizer:

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

我会喜欢在我的代码中进一步查看(在实例化Struct后)如果bar我的Foo结构中的属性没有默认的[:]值:

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字符串的:int或字符串:字符串值。

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

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

使用方法的isEmpty如果'(options.bar.isEmpty)' –

回答

1

使用isEmpty方法

您intializing错在这里

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") 
     }