[swift-evolution] [pre-proposal] Automatic unwrapper boolean properties using unless keyword

David Waite david at alkaline-solutions.com
Thu Mar 31 18:14:48 CDT 2016

> On Mar 31, 2016, at 3:54 PM, Guilherme Torres Castro via swift-evolution <swift-evolution at swift.org> wrote:

> Example:
> if !myList?.isEmpty { print("Ok") }

Swift originally had Optionals be boolean evaluable. Unfortunately, nil does not always mean false, and assuming so by default can mask issues. I believe there may have also been an issue with types being promoted to optional and then evaluated as true.

One option here is to use a new custom prefix operator to indicate you desire optional == false behavior. I chose “??” in the code below:

prefix operator ?? {}

prefix func ??(arg:Bool?) -> Bool {
  return arg ?? false

let data:[String:Bool?] = ["nil": nil, "true": true, "false": false]

for (key, value) in data {
  if ??value {
} # prints true

I don’t think a negated form is as clear, since this is a shortcut for two checks. However, I wrote one for completeness:

prefix operator ‽‽ {}
prefix func ‽‽(arg:Bool?) -> Bool {
  return !(arg ?? false)

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

More information about the swift-evolution mailing list