我是Swift的新手,如何将String转换为CGFloat?
我试过了:
var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)
一切都行不通了
答案 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()
。因此,从Double
到String
最安全的方法是:
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)
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")