Ответ 1
Swift 2.0 вы можете инициализировать Integer с помощью конструктора
var stringNumber = "1234"
var numberFromString = Int(stringNumber)
Поэтому я могу это сделать:
var stringNumb: NSString = "1357"
var someNumb: CInt = stringNumb.intValue
Но я не могу найти способ сделать это w/a String
. Я хотел бы сделать что-то вроде:
var stringNumb: String = "1357"
var someNumb: Int = Int(stringNumb)
Это также не работает:
var someNumbAlt: Int = myString.integerValue
Swift 2.0 вы можете инициализировать Integer с помощью конструктора
var stringNumber = "1234"
var numberFromString = Int(stringNumber)
Я бы использовал:
var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)
Примечание toInt()
:
Если строка представляет целое число, которое вписывается в Int, возвращает соответствующее целое число.
В Swift 3.0
Тип 1: Преобразование NSString в строку
let stringNumb:NSString = "1357"
let someNumb = Int(stringNumb as String) // 1357 as integer
Тип 2: если строка имеет целое число
let stringNumb = "1357"
let someNumb = Int(stringNumb) // 1357 as integer
Тип 3: если строка имеет значение Float
let stringNumb = "13.57"
if let stringToFloat = Float(stringNumb){
let someNumb = Int(stringToFloat)// 13 as Integer
}else{
//do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4"
}
Вы хотите toInt()
- вы должны быть немного осторожны, так как toInt()
возвращает необязательный Int.
let stringNumber = "1234"
let numberFromString = stringNumber.toInt()
// numberFromString is of type Int? with value 1234
let notANumber = "Uh oh"
let wontBeANumber = notANumber.toInt()
// wontBeANumber is of type Int? with value nil
Если вы можете использовать только NSString
.
Он очень похож на objective-c. Все типы данных существуют, но требуют добавления as NSString
var x = "400.0" as NSString
x.floatValue //string to float
x.doubleValue // to double
x.boolValue // to bool
x.integerValue // to integer
x.intValue // to int
Также добавлена функция toInt()
. См. Apple Inc. "Язык быстрого программирования". интерактивные книги. https://itun.es/us/jEUH0.l страница 49
x.toInt()
Вы можете перейти от String к NSString и преобразовать из CInt в Int следующим образом:
var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)
выше ответ не помог мне, так как мое строковое значение было "700.00"
с Swift 2.2 это работает для меня
let myString = "700.00"
let myInt = (myString as NSString).integerValue
Я передал myInt в NSFormatterClass
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0
let priceValue = formatter.stringFromNumber(myInt!)!
//Now priceValue is ₹ 700
Благодаря это сообщение в блоге.
Я написал расширение для этой цели. Он всегда возвращает Int
. Если строка не помещается в Int
, возвращается 0.
extension String {
func toTypeSafeInt() -> Int {
if let safeInt = self.toInt() {
return safeInt
} else {
return 0
}
}
}
Более общим решением может быть расширение
extension String {
var toFloat:Float {
return Float(self.bridgeToObjectiveC().floatValue)
}
var toDouble:Double {
....
}
....
}
это, например, расширяет быстрый родной объект String с помощью функции toFloat
Преобразование String в Int в Swift 2.0:
var str:NSString = Data as! NSString
var cont:Int = str.integerValue
использовать .intergerValue or intValue for Int32
8: 1 Коэффициенты (*)
var stringNumb: String = "1357"
var someNumb = Int(stringNumb)
или
var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)
Int(String)
возвращает необязательный Int?
, а не Int
.
Безопасное использование: явно не распаковывать
let unwrapped:Int = Int(stringNumb) ?? 0
или
if let stringNumb:Int = stringNumb { ... }
(*) Ни один из ответов на самом деле не ответил, почему var someNumb: Int = Int(stringNumb)
не работал.
Простой, но грязный способ
// Swift 1.2
if let intValue = "42".toInt() {
let number1 = NSNumber(integer:intValue)
}
// Swift 2.0
let number2 = Int(stringNumber)
// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)
Расширение
Это лучше, действительно, потому что он будет хорошо играть с локалями и десятичными знаками.
extension String {
var numberValue:NSNumber? {
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
return formatter.numberFromString(self)
}
}
Теперь вы можете просто:
let someFloat = "42.42".numberValue
let someInt = "42".numberValue