Casting CGFloat to Float in Swift
You can use the Float()
initializer:
let cgFloat: CGFloat = 3.14159
let someFloat = Float(cgFloat)
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.f
var someCGFloatFromInt = 2.f
var 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.0
var f: Float = Float(d) //this is an initialiser call, not a cast
var i: Int = Int(d) //this is an initialiser call, not a cast