Convert String to CGFloat in Swift
As of Swift 2.0, the Double
type has a failable initializer that accepts a String
. So the safest way to go from String
to CGFloat
is:
let string = "1.23456"
var cgFloat: CGFloat?
if let doubleValue = Double(string) {
cgFloat = CGFloat(doubleValue)
}
// cgFloat will be nil if string cannot be converted
If you have to do this often, you can add an extension method to String
:
extension String {
func CGFloatValue() -> CGFloat? {
guard let doubleValue = Double(self) else {
return nil
}
return CGFloat(doubleValue)
}
}
Note that you should return a CGFloat?
since the operation can fail.
If you want a safe way to do this, here is a possibility:
let str = "32.4"
if let n = NumberFormatter().number(from: str) {
let f = CGFloat(truncating: n)
}
If you change str
to "bob", it won't get converted to a float, while most of the other answers will get turned into 0.0
Side note: remember also that decimal separator might be either comma or period. You might want to specify it inside the number formatter
let formatter = NumberFormatter()
formatter.decimalSeparator = "." // or ","
// use formatter (e.g. formatter.number(from:))
You should cast string
to double
and then cast from double
to CGFloat
, Let try this:
let fl: CGFloat = CGFloat((str as NSString).doubleValue)