Swift相当于“?:”

时间:2015-09-09 03:09:58

标签: swift

ObjC

[MyObject doThisWithString:string?: [MyObject otherString]];

如何在Swift中执行此操作?

extension MyObject {
    func doThisWithString(string: String?) {
        ... <- assume defined
    }

    func otherString() -> String {
        return ... <- assume defined
    }
}

var MyInstance: MyObject
...
MyInstance.doThisWithString(myStringVar?: MyInstance.otherString()) <- how do I do this?

2 个答案:

答案 0 :(得分:6)

有一个'??'运算符称为“Nil coalescing”运算符。它确实完成了你需要的东西。引用documentation

  

无合并运营商

     

nil合并算子(a ?? b)打开一个可选的a if   包含一个值,如果a为nil,则返回默认值b。该   表达式a始终是可选类型。表达式b必须   匹配存储在。

中的类型      

nil coalescing运算符是下面代码的简写:

     

a!= nil?一个! :b

在您的情况下,您可以将表达式编写为:

MyInstance.doThisWithString(myStringVar ?? MyInstance.otherString()) 

答案 1 :(得分:0)

Swift为此提供了一个非常简单的解决方案。 Nil Coalescing Operator ??

Nil Coalescing Operator基本上尝试为可选项提供一些默认值,这样您就不必强行打开可选项。

例如:var someValue = someOptional ?? DEFAULT_VALUE(默认值取决于可选的类型。)

如果是实例,您只需将DEFAULT_VALUE替换为Class的默认实例。

例如:对于 cellForRowAtIndexPath ,它需要你强行打开你创建的单元格,但你可以在那里使用Nil Coalescing Operator以及返回someCell? TableViewCellClass()