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?
答案 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()强>