swiftroundingcgfloatceil

Round up a CGFloat in Swift


How can I round up a CGFloat in Swift? I've tried ceil(CDouble(myCGFloat)) but that only works on iPad Air & iPhone 5S.

When running on another simulated device I get an error saying 'NSNumber' is not a subtype of 'CGFloat'


Solution

  • Update: Apple have now defined some CGFloat-specific versions of common functions like ceil:

    func ceil(x: CGFloat) -> CGFloat
    

    ...specifically to cope with the 32/64-bit difference. If you simply use ceil with a CGFloat argument it should now work on all architectures.

    My original answer:

    This is pretty horrible, I think, but can anyone think of a better way? #if doesn't seem to work for CGFLOAT_IS_DOUBLE; I think you're limited to build configurations, from what I can see in the documentation for conditional compilation.

    var x = CGFloat(0.5)
    
    #if arch(x86_64) || arch(arm64)
    var test = ceil(x)
    #else
    var test = ceilf(x)
    #endif