A different direction would be to add a non-autoclosure variant to ?? that 
explicitly takes a closure.

public func ??<T>(optional: T?, defaultValue: () throws -> T) rethrows -> T {
  switch optional {
  case .Some(let wrapped): return wrapped
  case .None: return try defaultValue()
  }
}

Then, the following works:

var v = Optional(7)
// v = nil
do {
  let i = try v ?? { throw NSError(domain: "", code: 0, userInfo: [:]) }
  print(i)
}
catch {
  print(error)
}


Or, even more generally, allow functions and operators that take autoclosure 
parameters to be used with explicit closures? I shrugged my shoulders and wrote 
an overload when I hit that limitation, but I wonder whether it is necessary.

Cheers,
Guillaume Lessard

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to