Donc je peux faire ça:
var stringNumb: NSString = "1357"
var someNumb: CInt = stringNumb.intValue
Mais je ne trouve pas le moyen de le faire avec une String
. J'aimerais faire quelque chose comme:
var stringNumb: String = "1357"
var someNumb: Int = Int(stringNumb)
Cela ne marche pas non plus:
var someNumbAlt: Int = myString.integerValue
Swift 2.0 vous pouvez initialiser Integer à l'aide du constructeur
var stringNumber = "1234"
var numberFromString = Int(stringNumber)
J'utiliserais:
var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)
Note toInt()
:
Si la chaîne représente un entier qui correspond à un Int, renvoie l'entier correspondant.
Dans Swift 3.0
Type 1: Convertir NSString en chaîne
let stringNumb:NSString = "1357"
let someNumb = Int(stringNumb as String) // 1357 as integer
Type 2: Si la chaîne contient uniquement un entier
let stringNumb = "1357"
let someNumb = Int(stringNumb) // 1357 as integer
Type 3: Si la chaîne a une valeur 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"
}
La méthode que vous voulez utiliser est toInt()
- vous devez faire attention, car la fonction toInt()
renvoie un Int facultatif.
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
Si vous ne pouvez utiliser que NSString
.
C'est assez similaire à objective-c. Tous les types de données sont là mais nécessitent l'ajout de 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
Nous avons également ajouté une fonction toInt()
Voir Apple Inc., «Le langage de programmation Swift», iBooks. https://itun.es/us/jEUH0.l page 49
x.toInt()
ci-dessus, la réponse ne m'a pas aidé car ma valeur de chaîne était "700.00"
avec Swift 2.2 cela fonctionne pour moi
let myString = "700.00"
let myInt = (myString as NSString).integerValue
J'ai passé myInt à NSFormatterClass
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0
let priceValue = formatter.stringFromNumber(myInt!)!
//Now priceValue is ₹ 700
Merci à this blog post.
Vous pouvez passer de String à NSString et convertir de CInt en Int comme ceci:
var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)
J'ai écrit une extension à cet effet. Il retourne toujours une Int
. Si la chaîne ne rentre pas dans une Int
, 0 est renvoyé.
extension String {
func toTypeSafeInt() -> Int {
if let safeInt = self.toInt() {
return safeInt
} else {
return 0
}
}
}
Manière simple mais sale
// 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)
La voie d'extension
C'est mieux, vraiment, parce que ça va bien jouer avec les locales et les décimales.
extension String {
var numberValue:NSNumber? {
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
return formatter.numberFromString(self)
}
}
Maintenant, vous pouvez simplement faire:
let someFloat = "42.42".numberValue
let someInt = "42".numberValue
8: 1 Cotes (*)
var stringNumb: String = "1357"
var someNumb = Int(stringNumb)
ou
var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)
Int(String)
renvoie un Int?
facultatif, pas une Int
.
Utilisation sûre: ne pas décompresser explicitement
let unwrapped:Int = Int(stringNumb) ?? 0
ou
if let stringNumb:Int = stringNumb { ... }
(*) Aucune des réponses ne disait réellement pourquoi var someNumb: Int = Int(stringNumb)
ne fonctionnait pas.
Une solution plus générale pourrait être une extension
extension String {
var toFloat:Float {
return Float(self.bridgeToObjectiveC().floatValue)
}
var toDouble:Double {
....
}
....
}
ceci par exemple étend l'objet Swift natif String de toFloat
Convertissez String en Int dans Swift 2.0:
var str:NSString = Data as! NSString
var cont:Int = str.integerValue
utiliser .intergerValue or intValue for Int32