给定一个带有一个属性的结构 - 一个类型为<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]'
答案 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")
}