Ottieni il valore intero dalla stringa in swift


134

Quindi posso farlo:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

Ma non riesco a trovare il modo di farlo w / a String. Mi piacerebbe fare qualcosa del tipo:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

Questo non funziona neanche:

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)oppurevar someNumb = Int(stringNumb)
SwiftArchitect,

Risposte:


179

Swift 2.0 è possibile inizializzare Integer utilizzando il costruttore

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
A partire da Swift 2.0 non hai più il toInt()metodo come parte di String. Quindi questo Intcostruttore è ora l'unico modo per convertire stringhe in ints.
Morgan Wilde,

1
Il punto e virgola non è necessario
Sebastian

Puoi dirmi come gestire se l'utente inserisce un numero superiore a un numero limite Int64 nel campo di testo
Khushboo Dhote,

1
@Sebastian non è così frustrante? :)
Victor

94

Vorrei usare:

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

Nota toInt():

Se la stringa rappresenta un numero intero che si inserisce in un Int, restituisce il numero intero corrispondente.


5
Questo ha funzionato, sebbene se dichiari esplicitamente il var, devi aggiungere un punto esclamativo: var someNumb: Int = stringNumber.toInt()!come ha sottolineato @NateCook
Logan,

Non lo sto dichiarando esplicitamente. Il compilatore sa che numberFromString dovrebbe essere un int perché è inizializzato come uno ...
CW0007007

So che non lo sei, ma lo sono. Ho dovuto fare quell'adeguamento per farlo. Il tuo codice è corretto, basta aggiungerlo come commento.
Logan,

Sì, restituisce un valore solo se il valore si adatta a un Int come indicato dalla nota. Altrimenti restituisce zero ...
CW0007007,

5
Invece di mettere !la chiamata, è possibile dichiarare la variabile come optional: someNumb: Int? = stringNumber.toInt(). Quindi il sistema di sicurezza del tipo saprà che foopotrebbe non esistere. !Naturalmente il mettere si bloccherà se la stringa non può essere convertita in un numero.
gwcoffey,

18

In Swift 3.0

Tipo 1: converti NSString in stringa

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

Tipo 2: se la stringa ha solo numeri interi

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

Tipo 3: se la stringa ha un valore 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"
    }

Il codice per "Tipo 3" non è l'ideale. Invece di controllare stringToFloatè != nil, è necessario utilizzare if let.
rmaddy,

11

Il metodo che vuoi è toInt()- devi stare un po 'attento, poiché toInt()restituisce un Int opzionale.

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

ma allo stesso modo, toInt()è il modo giusto per farlo. gli optionals sono una parte fondamentale della lingua
Jiaaro,

Certo, devi solo essere consapevole che stai lavorando con un Int opzionale, non diretto.
Nate Cook,

5

Se sei in grado di utilizzare NSStringsolo.

È abbastanza simile all'obiettivo-c. Tutti i tipi di dati sono presenti ma richiedono l' as NSStringaggiunta

    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

Inoltre abbiamo toInt()aggiunto una funzione Vedi Apple Inc. "Il linguaggio di programmazione Swift". iBook. https://itun.es/us/jEUH0.l pagina 49

x.toInt()

dimenticato di aggiungere il as NSString. riparato @gwcoffey
John Riselvato il

2
Non voglio usare NSString, vedi domanda.
Logan,

4

la risposta sopra non mi ha aiutato poiché il mio valore di stringa era "700,00"

con Swift 2.2 questo funziona per me

let myString = "700.00"
let myInt = (myString as NSString).integerValue

Ho passato myInt a NSFormatterClass

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is700

Grazie a questo post sul blog.


1
Questa domanda riguarda l'ottenimento di un numero intero da una stringa. Nel tuo caso, non hai un Int, hai un doppio. In Swift, usa Double()lo stesso modo che stiamo usando Int(). Non è necessario utilizzare il bridging su NSString.
Eric Aya,

Ehi, @EricD, grazie per il tuo suggerimento, ma " Volevo Integer solo mentre sto passando da Int a NSNumberFormatter per il convertitore di valuta".
swiftBoy,

1
Bene in questo caso è possibile utilizzare Double() quindi utilizzare Int(). In questo modo: if let d = Double("700.00") { let i = Int(d); print (i) }:)
Eric Aya,

2

È possibile eseguire il bridge da String a NSString e convertire da CInt a Int in questo modo:

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

1

Ho scritto un'estensione per quello scopo. Restituisce sempre un Int. Se la stringa non rientra in un Int, viene restituito 0.

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

2
Questo può essere scritto in modo più succinto come return self.toInt() ?? 0. Probabilmente è meglio scriverlo in quel modo piuttosto che avere un metodo di estensione per questo.
jlong64,

0

Una soluzione più generale potrebbe essere un'estensione

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

questo ad esempio estende l'oggetto String nativo rapido di toFloat


0

Converti String in Int in Swift 2.0:

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

uso .intergerValue or intValue for Int32


0

Probabilità 8: 1 (*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

o

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)restituisce un facoltativo Int?, non un Int.


Uso sicuro: non scartare esplicitamente

let unwrapped:Int = Int(stringNumb) ?? 0

o

if let stringNumb:Int = stringNumb { ... }

(*) Nessuna delle risposte ha effettivamente affrontato il motivo per cui var someNumb: Int = Int(stringNumb)non funzionava.


Grazie @ utente3441734. Non avrei dovuto usare il casting .
SwiftArchitect,

0

Modo semplice ma sporco

// 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 via dell'estensione

Questo è meglio, davvero, perché giocherà bene con locali e decimali.

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

Ora puoi semplicemente fare:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.