我是Swift的新手,如何将String转换为CGFloat?
我试过了:
var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)
Run Code Online (Sandbox Code Playgroud)
一切都行不通
Gre*_*ley 117
如果你想要一个安全的方法来做到这一点,有一种可能性:
let str = "32.4"
if let n = NSNumberFormatter().numberFromString(str) {
let f = CGFloat(n)
}
Run Code Online (Sandbox Code Playgroud)
如果您更改str为"bob",它将不会转换为浮点数,而大多数其他答案将变为0.0.
对于Swift 3.0,我会做这样的事情:
let str = "32.4"
guard let n = NSNumberFormatter().number(from: str) else { return }
// Use `n` here
Run Code Online (Sandbox Code Playgroud)
在Swift 4中,NSNumberFormatter已重命名为NumberFormatter:
let str = "32.4"
guard let n = NumberFormatter().number(from: str) else { return }
Run Code Online (Sandbox Code Playgroud)
Mic*_*ire 20
从Swift 2.0开始,该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
Run Code Online (Sandbox Code Playgroud)
如果您经常这样做,可以添加扩展方法String:
extension String {
func CGFloatValue() -> CGFloat? {
guard let doubleValue = Double(self) else {
return nil
}
return CGFloat(doubleValue)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您应该返回a,CGFloat?因为操作可能会失败.
小智 15
你应该转换string为double然后转换double为CGFloat,试试这个:
let fl: CGFloat = CGFloat((str as NSString).doubleValue)
Run Code Online (Sandbox Code Playgroud)
vac*_*ama 14
这有效:
let str = "3.141592654"
let fl = CGFloat((str as NSString).floatValue)
Run Code Online (Sandbox Code Playgroud)
Art*_*nko 11
简单的一行解决方案:
let pi = CGFloat(Double("3.14") ?? 0)
Run Code Online (Sandbox Code Playgroud)
在Swift 3.0中
if let n = NumberFormatter().number(from: string) {
let f = CGFloat(n)
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您确定该字符串符合所有要求
let n = CGFloat(NumberFormatter().number(from: string)!)
Run Code Online (Sandbox Code Playgroud)
虽然其他答案是正确的,但您看到的结果将有尾随小数.
例如:
let str = "3.141592654"
let foo = CGFloat((str as NSString).floatValue)
Run Code Online (Sandbox Code Playgroud)
结果:
3.14159274101257
Run Code Online (Sandbox Code Playgroud)
要从字符串中获取正确的值,请尝试以下操作:
let str : String = "3.141592654"
let secStr : NSString = str as NSString
let flt : CGFloat = CGFloat(secStr.doubleValue)
Run Code Online (Sandbox Code Playgroud)
结果:
3.141592654
Run Code Online (Sandbox Code Playgroud)
您可以进行扩展,以将初始化添加到CGFloat
extension CGFloat {
init?(string: String) {
guard let number = NumberFormatter().number(from: string) else {
return nil
}
self.init(number.floatValue)
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用 let x = CGFloat(xString)
| 归档时间: |
|
| 查看次数: |
37234 次 |
| 最近记录: |