Ich möchte die ständige Notwendigkeit vereinfachenBenutzerdefinierte Bediener zu vereinfachen If-Let
if let firstName = firstName {
self.name = firstName
}
Eine mögliche individuelle, generische Betreiber zu tun dies zu tun wäre,
infix operator ?= {}
func ?= <T>(inout left: T, right: T?) {
if let right = right {
left = right
}
}
das vorherige Beispiel zu vereinfachen zu
self.name ?= firstName
Dies schafft ein Problem, wenn vorName 's Wert ist Null, dann Swift wird den Wert in einem optionalen umbrechen.
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
*/
Eine mögliche Lösung für den benutzerdefinierten Operator? Ich habe versucht, den linken Parameter so zu beschränken, dass er nicht optional ist, aber das ist mit generischen Typbeschränkungen nicht möglich.
Das ist ziemlich cool – marchinram