2016-10-28 43 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") 
     }