infix operator ??= { associativity right precedence 90 assignment } func ??=<T>(inout optional: T?, @autoclosure defaultValue: () -> T?) { optional = optional ?? defaultValue() }