On 10.06.2017 7:07, Justin Oroz via swift-evolution wrote:
First time trying to contribute, hopefully this is the proper channel to submit.

I propose an addition to the guard let statement to allow for replacement of 
optionals with unwrapped values.

ex)

two current options


obj.methodWithCallback() {(foo, bar) in
        guard let foo = foo else {
                return
        }
        
        foo.prop = “new”
}
OR

obj.methodWithCallback() {(foo, bar) in
        guard foo != nil else {
                return
        }
        
        foo!.prop = “new”
}


I propose the following option:

obj.methodWithCallback() {(foo, bar) in
        guard foo else {
                return
        }
        
        foo.prop = “new”
}

This reduces the seemingly redundant "guard let foo = foo” statement and 
removes the unnecessary forced optional unwrapping.


There was a discussion about similar subject in the list and was decided IIRC that shadowing is not a good practice so it doesn't worth a special syntactic sugar. (correct me if I'm missing something)

Personally, I believe shadowing already (and will be) used very often(usually because we already have a good name for variable, and it is hard to invent one more) and *good* syntactic sugar for it will make Swift code more clean. But I like the suggestion with 'let' keyword for such shadowing to make it clear that 'foo' is shadowed(re-declared) with its unwrapped version :

obj.methodWithCallback() {(someMeaningfulName, bar) in
        guard let someMeaningfulName else {
                return
        }
        
        someMeaningfulName.prop = “new”
}

Note that if it's 'foo' - it seems not a problem to write
guard let foo = foo else {..},
but when we have
guard let someMeaningfulName = someMeaningfulName else {..}
, we have to parse each variable to check if the same name declared or probably different name. Plus DRY principle.

if let someMeaningfulName {
  // unwrapped someMeaningfulName here
}

instead of

if let someMeaningfulName = someMeaningfulName {
}

- Justin


_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to