如何将String转换为CGFloat?
我试过了:
var string = "132"
var stringChange = CGFloat((string as NSString).floatValue)
但是在Xcode 7中它不起作用。
答案 0 :(得分:5)
像这样:
let cgFloat : CGFloat? = Double("1.49").map{ CGFloat($0) }
如果无法解析字符串,则 cgFloat
为nil
您也可以使用不含map
的版本,它完全相同:
let cgFloat : CGFloat?
if let double = Double("1.49") {
cgFloat = CGFloat(double)
} else {
cgFloat = nil
}
示例:
let toCGFloat = { Double($0).map{ CGFloat($0) } }
toCGFloat("123") // 123
toCGFloat("123.3") // 123.3
toCGFloat("123.8326947239875") // 123.8326947239875
您可以将Double
更改为Float
并查看值如何变得不准确,这就是您应该使用Double
的原因。
答案 1 :(得分:0)
试试这段代码:
var yourString = "132.0"
var yourFloatvalueFromString = CGFloat(NumberFormatter().number(from: yourString)!)
答案 2 :(得分:0)
先转换为 Double,然后转换为 CGFloat。这在 Swift 5 上对我有用。
let string = "9000"
let double = Double(string)!
let cgFloat = CGFloat(double)
我不知道为什么会这样。但我希望它有帮助。
答案 3 :(得分:-1)
CGFloat类型是一种类型,取决于运行的系统是32位还是64位。基本上 - 它是一个浮动。
因此将字符串转换为浮点数然后将其转换为CGFloat。但是,在进行这些类型的转换时,您需要注意并非所有字符串都可以转换为float(因此,转换为CGFloat)。因此,一个好的解决方案是从String中为CGFloat编写一个简单的初始化器:
extension CGFloat {
init?(_ str: String) {
guard let float = Float(str) else { return nil }
self = CGFloat(float)
}
}
此扩展可以按如下方式使用:
let f1 = CGFloat("123") // => 123
let f2 = CGFloat("123.3") // => 123.300003051758
let f3 = CGFloat("123a") // => nil