我正在尝试从字典中更新核心数据对象。字典可能不包含值,因此我需要在字典中存在的条件下分配值。下面的代码有效,但似乎太长了。有没有办法让条件赋值更紧凑?
@NSManaged var title: String
...
func updateFromDict(dict :[String :String]){
if dict["title"] != nil {
self.title = dict["title"]!
}
}
答案 0 :(得分:1)
而不是检查nil
, Swift-y 方式是使用可选绑定:
if let title = dict["title"] {
self.title = title
}
这真的不短。
您无法使作业成为可选作业,但您可以使用 nil合并运算符 ??
来展开值,只需将self.title
指定给自身{} {1}}是dict["title"]
:
nil
如果您想获得幻想,可以定义自己的操作符self.title = dict["title"] ?? self.title
,如果右侧不是=?
,则会执行分配:
nil
用法:
infix operator =? {}
func =?<T> (inout lhs: T, rhs: T?) {
if let value = rhs {
lhs = value
}
}
答案 1 :(得分:0)
您可以使用内置的0011101100
功能将其作为一行进行
对于可选项:
map()
仅当// Swift 1.2:
map(dict["title"]) { self.title = $0 }
// Swift 2.0:
dict["title"].map { self.title = $0 }
不是dict["title"]
时才执行关闭,然后执行
nil
是未包装的值。