[swift-evolution] !? operator for ternary conditional unwrapping

Maxim Veksler maxim at vekslers.org
Wed Feb 8 08:04:25 CST 2017


Let's assume I have an optional "name" parameter, based on the optional
status of the parameters I would like to compose string with either the
unwrapped value of name, or the string "null". The use case for is
syntactic sugar to compose a GraphQL queries.

A (sampled) illustration of the code that currently solves it looks as

func query(name: String?) {
  let variables_name = name != nil ? "\"\(name!)\"" : "null"
return "{ param: \(variables_name) }"

Based on optional status the following output is expected

let name = "Max"
query(name: name)
// { param: "Max" }

let name: String? = nil
query(name: name)
// { param: null }

I think it might be useful to have an conditional unwrap operator !? that
would enable syntax sugar uch as the following built into the language:

func query(name: String?) {
  return "{ param: \(name !? "\"\(name)\"": "null") }"

This expression is expected to produce same output as the examples above.
It means check the Optional state of name: String?, in case it has a value,
unwrap it and make the unwrapped value accessible under the same name to
the true condition part of the expression, otherwise return the false condition
part of the expression.

The effectively removes the need to have the "if != nil" and the forced
unwrap syntactical code, and IMHO improves code readability and

I'm wondering what the community thinks of the displayed use case, and
proposed solution?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170208/35a89cba/attachment.html>

More information about the swift-evolution mailing list