在Swift中将String转换为CGFloat

时间:2014-12-22 02:14:15

标签: swift

我是Swift的新手,如何将String转换为CGFloat?

我试过了:

var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)

一切都行不通了

12 个答案:

答案 0 :(得分:104)

如果您想要一种安全的方法,可以采用以下方法:

let str = "32.4"
if let n = NSNumberFormatter().numberFromString(str) {
    let f = CGFloat(n)
}

如果您将str更改为" bob",它将无法转换为浮点数,而其他大部分答案将变为0.0。

对于Swift 3.0,我会做这样的事情:

let str = "32.4"
guard let n = NSNumberFormatter().number(from: str) else { return }
// Use `n` here

在Swift 4中,NSNumberFormatter已重命名为NumberFormatter

let str = "32.4"
guard let n = NumberFormatter().number(from: str) else { return }

答案 1 :(得分:20)

从Swift 2.0开始,HttpURLConnection类型有一个可用的初始化程序,它接受getInputStream()。因此,从DoubleString最安全的方法是:

String

如果您经常这样做,可以向CGFloat添加扩展方法:

let string = "1.23456"
var cgFloat: CGFloat?

if let doubleValue = Double(string) {
    cgFloat = CGFloat(doubleValue)
}

// cgFloat will be nil if string cannot be converted

请注意,您应该返回String,因为操作可能会失败。

答案 2 :(得分:14)

这有效:

let str = "3.141592654"
let fl = CGFloat((str as NSString).floatValue)

答案 3 :(得分:14)

您应该将string投射到double,然后从double投射到CGFloat,试试这个:

let fl: CGFloat = CGFloat((str as NSString).doubleValue)

答案 4 :(得分:9)

在Swift 3.0中

e <- c(1,1,1,0,0)

或者如果您确定该字符串符合所有要求

if let n = NumberFormatter().number(from: string) {
  let f = CGFloat(n)
}

答案 5 :(得分:5)

虽然其他答案是正确的,但您看到的结果将包含尾随小数。

例如:

let str = "3.141592654"
let foo = CGFloat((str as NSString).floatValue)

结果:

3.14159274101257

要从字符串中获取正确的值,请尝试以下操作:

let str : String = "3.141592654"
let secStr : NSString = str as NSString
let flt : CGFloat = CGFloat(secStr.doubleValue)

结果:

3.141592654

答案 6 :(得分:4)

您可以制作一个向CGFloat添加init的扩展程序

extension CGFloat {

    init?(string: String) {

        guard let number = NumberFormatter().number(from: string) else {
            return nil
        }

        self.init(number.floatValue)
    }

}

let x = CGFloat(xString)

一样使用它

答案 7 :(得分:2)

这是一种解决方法,但您可以将其转换为NSString,然后获取浮点值,然后从该值初始化CGFloat。例如:

let str = "1.02345332"
let foo = CGFloat((str as NSString).floatValue)

答案 8 :(得分:2)

Swift 3.1中的

if let n = NumberFormatter().number(from: string) {
   let fl = CGFloat(n)
} 

let fl = CGFloat((str as NSString).floatValue))

答案 9 :(得分:1)

好问题。实际上没有任何纯Swift API用于将表示CGFloat的字符串转换为CGFloat。纯Swift允许您转换为数字的唯一字符串表示的数字是整数。您将不得不使用其他库中的其他方法 - 例如,从Foundation的NSString或C&#(Darwin&#39; s)strtod开始。

答案 10 :(得分:0)

简单的一线解决方案:

let pi = CGFloat(Double("3.14") ?? 0)

答案 11 :(得分:-1)

let myFloatNumber = CGFloat("4.22")