[swift-evolution] More flexible guard statement

Jakob Egger jakob at eggerapps.at
Sat Dec 12 11:43:14 CST 2015


At the moment "guard let" can only be used for unwrapping optionals. It
would be really nice if it could also be used with non-optional values.
For example, I'd like to write code like the following

guard 
    let tableView = self.tableView,
    let col = tableView.columnWithIdentifier("MyColumn") where col != -1
else {
    NSBeep()
    print("an error occurred")
    return
}

This is not possible, because the second let assignment is non-optional,
so I have to write it like this:

guard let tableView = self.tableView else {
    NSBeep()
    print("an error occurred")
    return
}
let col = tableView.columnWithIdentifier("MyColumn")
guard col != -1 else {
    NSBeep()
    print("an error occurred")
    return
}

This leads to a lot of duplicated error handling code.

Ideally, I'd also like to mix let & where clauses in a single guard
statement, like this:

guard 
    let tableView = self.tableView,
    let col = tableView.columnWithIdentifier("MyColumn") where col !=
    -1,
    let headerCell = tableView.tableColumns[col].headerCell as?
    MyTableHeaderCell
else {
    NSBeep()
    print("an error occurred")
    return
}

What do you think? Right now I always end up writing a lot of separate
guard statement, and I have a lot of repeated error handling code.


Best regards,
Jakob


More information about the swift-evolution mailing list