[swift-evolution] More flexible guard statement
Al Skipp
al_skipp at fastmail.fm
Sat Dec 12 12:23:43 CST 2015
How about extending ‘NSTableView’ with a subscript?
extension NSTableView {
subscript(columnID columnID: String) -> Int? {
get {
let c = columnWithIdentifier(columnID)
return c >= 0 ? c : .None
}
}
}
tableView[columnID: "MyColumn"]
It doesn’t address the general case, but it does introduce a more Swifty way of dealing with non-existent return values in this use case and would enable you to use it with guard.
Al
> On 12 Dec 2015, at 17:43, Jakob Egger via swift-evolution <swift-evolution at swift.org> wrote:
>
> 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
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
More information about the swift-evolution
mailing list