After implementing the proposal 
https://github.com/apple/swift-evolution/blob/master/proposals/0170-nsnumber_bridge.md
 
<https://github.com/apple/swift-evolution/blob/master/proposals/0170-nsnumber_bridge.md>
 we have gotten some initial feedback.

It seems that there is definitely a fair amount of confusion and heartache for 
dealing with Float and Double values being bridged. 

Specifically the cases like:

NSNumber(value 0.1) as? Float

which with the current implementation will return nil since the Double value 
0.1 cannot be represented exactly as a Float.

It seems like the overwhelming majority of users know full well that Float will 
result in a loss of precision (hence why they chose that type over Double). 
This means that the floating point bridges for Double, Float, and CGFloat 
should not be the pedantic “exactly” cases but instead infer the conversion 
intent of a lax/approximated version.

So in short: for the betterment of the API ergonomics, the floating point types 
as destinations will be pulled back to their initial Swift 3 behavior.

Additionally to aide appropriate migration to the appropriate 
truncating/exactly initializers the un-labeled, deprecated in Swift 4, plain 
init methods to the numeric types with an NSNumber will now be annotated with 
the suggested replacements.

Thanks for your time and feedback,
Philippe Hausler
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to