Я новичок в Swift, как я могу преобразовать String в CGFloat?
Я пробовал:
var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)
все не работает
Я новичок в Swift, как я могу преобразовать String в CGFloat?
Я пробовал:
var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)
все не работает
Если вы хотите безопасный способ сделать это, вот возможность:
let str = "32.4"
if let n = NSNumberFormatter().numberFromString(str) {
let f = CGFloat(n)
}
Если вы измените str
на "bob", он не будет преобразован в float, тогда как большинство других ответов будет преобразовано в 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 }
С 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
Если вам нужно делать это часто, вы можете добавить метод расширения к String
:
extension String {
func CGFloatValue() -> CGFloat? {
guard let doubleValue = Double(self) else {
return nil
}
return CGFloat(doubleValue)
}
}
Обратите внимание, что вы должны вернуть CGFloat?
, поскольку операция может завершиться неудачей.
Это работает:
let str = "3.141592654"
let fl = CGFloat((str as NSString).floatValue)
Вам следует отбрасывать string
в double
, а затем отбрасывать от double
до CGFloat
. Попробуйте это:
let fl: CGFloat = CGFloat((str as NSString).doubleValue)
в Swift 3.0
if let n = NumberFormatter().number(from: string) {
let f = CGFloat(n)
}
или это, если вы уверены, что строка соответствует всем требованиям
let n = CGFloat(NumberFormatter().number(from: string)!)
В то время как другие ответы верны, но результат, который вы видите, будет иметь концевые десятичные числа.
Например:
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
Вы можете сделать расширение, которое добавляет инициализацию в CGFloat
extension CGFloat {
init?(string: String) {
guard let number = NumberFormatter().number(from: string) else {
return nil
}
self.init(number.floatValue)
}
}
Используйте это так let x = CGFloat(xString)
в Swift 3.1
if let n = NumberFormatter().number(from: string) {
let fl = CGFloat(n)
}
или
let fl = CGFloat((str as NSString).floatValue))
Это своего рода работа, но вы можете использовать ее как NSString, затем получить значение float, а затем инициализировать CGFloat из этого значения. Пример:
let str = "1.02345332"
let foo = CGFloat((str as NSString).floatValue)
strtod
. Простое решение в одну строку:
let pi = CGFloat(Double("3.14") ?? 0)