Casting CGFloat to Float in Swift
If you are as lazy as I am, in an Extensions.swift define the following:
extension Int { var f: CGFloat { return CGFloat(self) }}extension Float { var f: CGFloat { return CGFloat(self) }}extension Double { var f: CGFloat { return CGFloat(self) }}extension CGFloat { var swf: Float { return Float(self) }}
Then you can do:
var someCGFloatFromFloat = 1.3.fvar someCGFloatFromInt = 2.fvar someFloatFromCGFloat = someCGFloatFromFloat.swf
Usually, the best solution is to keep the type and use CGFloat
, even in Swift. That's because CGFloat
has different size on 32bit and 64bit machines.
Keyword as
can be used only for dynamic casting (for subclasses), e.g.
class A {}class B : A {}var a: A = B()var b: B = a as B
However, Double
, Int
, Float
etc are not subclasses of each other, therefore to "cast" you have to create a new instance, e.g.
var d: Double = 2.0var f: Float = Float(d) //this is an initialiser call, not a castvar i: Int = Int(d) //this is an initialiser call, not a cast