Interesting. I didn’t know that you couldn’t use CGFloat.max/CGFloat.min (aka 
CGFloat.greatestFiniteMagnitude/CGFloat.leastNormalMagnitude) with auto layout. 
Good to know.

However, I was not referring to auto layout, but to the calculation of text 
height based on a fixed width. Like:

let fixedWidthSize = CGSize(width: myWidth, height: 
CGFloat.greatestFiniteMagnitude)
let textHeight = myLabel.sizeThatFits(fixedWidthSize).height

I have done this many times before with no errors and I have seen other people 
do this too. (Surely you have as well!)

> On Jun 10, 2016, at 3:32 PM, Erica Sadun <[email protected]> wrote:
> 
> CGFloat has .max and .min. And if you use them, you get:
> 2016-06-10 13:32:14.185 Untitled Page 10[18435:13174627] This 
> NSLayoutConstraint is being configured with a constant that exceeds internal 
> limits.  A smaller value will be substituted, but this problem should be 
> fixed. Break on void _NSLayoutConstraintNumberExceedsLimit() to debug.  This 
> will be logged only once.  This may break in the future.
> 
> -- E
> 
>> On Jun 10, 2016, at 12:24 PM, Darren Mo via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> Today, one can get max/min by doing:
>> 
>> let max = Float.greatestFiniteMagnitude
>> let min = -Float.greatestFiniteMagnitude
>> 
>> I propose that the floating point types expose properties for max/min.
>> 
>> max, in particular, is used quite a lot in UI code for fixed-width layout of 
>> text. But having to spell out greatestFiniteMagnitude every time is a pain. 
>> For example…
>> 
>> Compare this:
>> extension NSTextView {
>>    func configureForFixedWidth() {
>>       minSize = NSSize.zero
>>       maxSize = NSSize(width: CGFloat.greatestFiniteMagnitude, height: 
>> CGFloat.greatestFiniteMagnitude)
>>       isHorizontallyResizable = false
>>       isVerticallyResizable = true
>> 
>>       textContainer?.containerSize = NSSize(width: bounds.width, height: 
>> CGFloat.greatestFiniteMagnitude)
>>       textContainer?.widthTracksTextView = true
>>    }
>> }
>> 
>> To this:
>> extension NSTextView {
>>    func configureForFixedWidth() {
>>       minSize = NSSize.zero
>>       maxSize = NSSize(width: CGFloat.max, height: CGFloat.max)
>>       isHorizontallyResizable = false
>>       isVerticallyResizable = true
> 
>> 
>>       textContainer?.containerSize = NSSize(width: bounds.width, height: 
>> CGFloat.max)
>>       textContainer?.widthTracksTextView = true
>>    }
>> }
>> 
>> The latter snippet is much more understandable (and less typing). It is more 
>> understandable because users don’t have to know exactly how floating point 
>> works in order to get the equivalent of Int.max/Int.min for CGFloat.
>> 
>> One of the concerns with naming them max/min is that infinity/-infinity is 
>> technically the real max/min. We could name them finiteMax/finiteMin, but I 
>> think keeping the names consistent with Int et al. is important since they 
>> serve the same purpose. Besides, I think dealing with infinity is rare in 
>> real-world usage. Those that are using infinity know that it is obviously 
>> the true max.
>> 
>> I think adding these floating point properties is in line with Swift 3’s 
>> goals of consistency and refinement.
>> 
>> Thoughts?
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[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