Swift相当于"?:"

SG1*_*SG1 0 swift

ObjC

[MyObject doThisWithString:string?: [MyObject otherString]];
Run Code Online (Sandbox Code Playgroud)

我怎么能在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?
Run Code Online (Sandbox Code Playgroud)

Shr*_*ada 6

有一个'??' 运算符称为"Nil coalescing"运算符.它确实完成了你需要的东西.引用文档:

零合并运算符

如果a包含值,则nil合并运算符(a ?? b)展开可选a;如果a为n,则返回默认值b.表达式a始终是可选类型.表达式b必须与存储在a中的类型匹配.

nil合并运算符是以下代码的简写:

a!=零?一个!:b

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

MyInstance.doThisWithString(myStringVar ?? MyInstance.otherString()) 
Run Code Online (Sandbox Code Playgroud)