将String转换为CGFloat

时间:2015-09-29 18:53:11

标签: swift

如何将String转换为CGFloat?

我试过了:

var string     = "132"
var stringChange     = CGFloat((string as NSString).floatValue)

但是在Xcode 7中它不起作用。

4 个答案:

答案 0 :(得分:5)

像这样:

let cgFloat : CGFloat? = Double("1.49").map{ CGFloat($0) }
如果无法解析字符串,则

cgFloatnil

您也可以使用不含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
相关问题