swift中托管对象变量的条件分配的快捷方式

时间:2015-09-05 13:09:41

标签: swift core-data dictionary

我正在尝试从字典中更新核心数据对象。字典可能不包含值,因此我需要在字典中存在的条件下分配值。下面的代码有效,但似乎太长了。有没有办法让条件赋值更紧凑?

@NSManaged var title: String
...
func updateFromDict(dict :[String :String]){
    if dict["title"] != nil {
         self.title = dict["title"]!
    }
}

2 个答案:

答案 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是未包装的值。