我想简化需要不断做运营商定制,简化如果-让
if let firstName = firstName {
self.name = firstName
}
一个可能的习俗,一般运营商做这将是
infix operator ?= {}
func ?= <T>(inout left: T, right: T?) {
if let right = right {
left = right
}
}
简化前面的例子到
self.name ?= firstName
这会产生一个问题,如果名字的值是零,那么Swift会将该值包含在一个可选项中。
var name: String? = "Bob"
var firstName: String? = nil
self.name ?= firstName
print(self.name)
/*
prints "nil" since it is wrapping firstName in an optional when
passed in.
E.g. Optional<nil> gets unwrapped to nil in function and assigned
*/
任何可能的修复自定义运算符?我试图限制左边的参数不是可选的,但这对于泛型的类型约束是不可能的。
这很酷 – marchinram