If we go back to your original example:


func scaleAndCropImage(
    image: UIImage,
    toSize size: CGSize,
    fitImage: Bool = true
    ) -> UIImage {

There is a different type of sugar that I would like to have: Having label 
stand for `true` when we have a defaulted boolean flag, whose default value is 
false.

At call site we either say:

scaleAndCropImage(image: myImage, toSize: mySize)

or: 

scaleAndCropImage(image: myImage, toSize: mySize, fitImage)

We could still use:

scaleAndCropImage(image: myImage, toSize: mySize, fitImage: true)
or
scaleAndCropImage(image: myImage, toSize: mySize, fitImage: false)

Note that this is addressing a different situation: When we have multiple 
boolean flag parameters that can be combined like an OptionSet.

This is purely sugar: if the identifier matches the label of a defaulted to 
false boolean flag, it is interpreted as if the flag was passed as true. Other 
than that there is no effect.

I also like your idea as long as we put a limitation like what you proposed: 
Having it strictly be a UInt8 (or whatever) enum. Still the general resilience 
issues with enums remain and may get more complicated with this addition.


> On May 31, 2016, at 3:00 PM, Erica Sadun via swift-evolution 
> <[email protected]> wrote:
> 
> 
>> On May 31, 2016, at 3:20 PM, Brent Royal-Gordon <[email protected]> 
>> wrote:
>> 
>>> func scaleAndCropImage(
>>>   image: UIImage,
>>>   toSize size: CGSize,
>>>   operation: (.Fit | .Fill) = .Fit
>>>   ) -> UIImage {
>> 
>> As I said the last time this proposal came up, I think this is great right 
>> up until the moment you need `operation` to be computed or kept in a 
>> variable. Then you need to start copying your anonymous enum type all over 
>> your source, and there's no central place to make changes. The same thing is 
>> true of tuples, but tuples are easy to structure and destructure from 
>> individual values on the spot; anonymous enums aren't really like that.
> 
> And the obvious answer is you can have up to 255 of these babies for the 
> anonymous enum type, and be able to pass numerical equivalents UInt8 with 
> compile time substitution. That the ad-hoc enumeration is basically a 
> syntactic shorthand for UInt8, with an enforced upper bound compile time 
> check simplifies everything including switch statements.
> 
> -- E
> 
> _______________________________________________
> 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