如果您的意图是必须在运算符之后添加花括号,则可以将其实现(无需声明rhs
为自动关闭):
infix operator ?> : NilCoalescingPrecedence
func ?> (lhs: Any?, rhs: ()->Any) {
if lhs == nil {
print("lhs is nil")
rhs()
}
}
var myString: String? = ""
// some case that made "string" to be nil...
myString = nil
myString ?> {
print("executing")
}
但是,声明自动关闭的目的是包装作为参数传递给函数的表达式:
这种语法便利让您可以通过编写普通表达式而不是显式闭包来省略函数参数周围的大括号。
官方 Swift 文档 - 闭包,自动闭包
这意味着不需要花括号,这在使用运算符时应该更自然:
infix operator ?> : NilCoalescingPrecedence
func ?> (lhs: Any?, rhs: @autoclosure ()->Any) {
if lhs == nil {
print("lhs is nil")
rhs()
}
}
var myString: String? = ""
// some case that made "string" to be nil...
myString = nil
// you could use your operator like:
myString ?> print("executing")
可是等等!
可能会遇到一个问题:如果要在操作符之后添加一段代码怎么办?
好吧,毫无疑问,您必须添加花括号:
let doSomething = {
print("executing")
print("second line of execution")
print("third line of execution")
}
myString ?> doSomething()