it-swarm.com.de

Umwandlung von String in Int mit Swift

Die Anwendung berechnet die Beschleunigung im Wesentlichen durch Eingabe der Anfangs- und Endgeschwindigkeit und -zeit und berechnet dann die Beschleunigung mithilfe einer Formel. Da die Werte in den Textfeldern jedoch eine Zeichenfolge sind, kann ich sie nicht in Ganzzahlen konvertieren.

@IBOutlet var txtBox1 : UITextField
@IBOutlet var txtBox2 : UITextField
@IBOutlet var txtBox3 : UITextField
@IBOutlet var lblAnswer : UILabel


@IBAction func btn1(sender : AnyObject) {

    let answer1 = "The acceleration is"
    var answer2 = txtBox1
    var answer3 = txtBox2
    var answer4 = txtBox3
301
Marwan Qasem

Grundidee, Beachten Sie, dass dies nur in Swift 1.x funktioniert (check out Antwort von ParaSara um zu sehen, wie es in Swift 2.x funktioniert):

    // toInt returns optional that's why we used a:Int?
    let a:Int? = firstText.text.toInt() // firstText is UITextField
    let b:Int? = secondText.text.toInt() // secondText is UITextField

    // check a and b before unwrapping using !
    if a && b {
        var ans = a! + b!
        answerLabel.text = "Answer is \(ans)" // answerLabel ie UILabel
    } else {
        answerLabel.text = "Input values are not numeric"
    }

Update für Swift 4

...
let a:Int? = Int(firstText.text) // firstText is UITextField
let b:Int? = Int(secondText.text) // secondText is UITextField
...
262

Update Antwort für Swift 2.0

Die toInt()-Methode hat einen Fehler erhalten. In Swift 2.x wurde die .toInt()-Funktion aus String entfernt. Als Ersatz hat Int jetzt einen Initialisierer, der einen String akzeptiert:

let a:Int? = Int(firstText.text)     // firstText is UITextField  
let b:Int? = Int(secondText.text)   // secondText is UITextField

myString.toInt() - konvertiert den String-Wert in int.

Swift 3.x  

Wenn Sie eine Ganzzahl haben, die sich innerhalb einer Zeichenfolge versteckt, können Sie mit dem Konstruktor der Ganzzahl wie folgt konvertieren:

let myInt = Int(textField.text)

Wie bei anderen Datentypen (Float und Double) können Sie auch mithilfe von NSString konvertieren:

let myString = "556"
let myInt = (myString as NSString).integerValue
78
Kumar KL

Xcode 8.3.2 • Swift 3.1

class IntegerField: UITextField {
    var integer: Int {
        return string.digits.integer
    }
    override func willMove(toSuperview newSuperview: UIView?) {
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        keyboardType = .numberPad
        textAlignment = .right
        editingChanged()
    }
    func editingChanged() {
        text = Formatter.decimal.string(for: integer)
        print(integer)
    }
}

Erforderliche Erweiterungen, Strukturen und Initialisierer:

extension Sequence where Iterator.Element == UnicodeScalar {
    var string: String { return String(String.UnicodeScalarView(self)) }
}

extension Formatter {
    static let decimal = NumberFormatter(numberStyle: .decimal)
}

extension UITextField {
    var string: String { return text ?? "" }
}

extension String {
    private static var digitsPattern = UnicodeScalar("0")..."9"
    var digits: String {
        return unicodeScalars.filter { String.digitsPattern ~= $0 }.string
    }
    var integer: Int { return Int(self) ?? 0 }
}

extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}
31
Leo Dabus

Sie möchten NSNumberFormatter().numberFromString(yourNumberString) verwenden. Es ist großartig, weil es ein optionales Ergebnis zurückgibt, das Sie mit einem "wenn-lassen" testen können, um festzustellen, ob die Konvertierung erfolgreich war. z.B. 

     var myString = "\(10)"
     if let myNumber = NSNumberFormatter().numberFromString(myString) {
          var myInt = myNumber.integerValue
          // do what you need to do with myInt
     } else {
          // what ever error code you need to write
     }
22
Abaho Katabarwa

Swift 4.0

let stringNumber = "123"
let number = Int(stringNumber) //here number is of type "Int?"


//using Forced Unwrapping

if number != nil {         
 //string is converted to Int
}

sie können auch die optionale Bindung außer der erzwungenen Bindung verwenden.

z.B:

  if let number = Int(stringNumber) { 
   // number is of type Int 
  }
17
OOMMEN

// Xcode 8.1 und Swift 3.0

Wir können es auch durch optionale Bindung, einfach handhaben

let occur = "10"

if let occ = Int(occur) {
        print("By optional binding :", occ*2) // 20

    }
14
Pankaj Nigam

Swift 3

Der einfachste und sicherere Weg ist:

@IBOutlet var textFieldA  : UITextField
@IBOutlet var textFieldB  : UITextField
@IBOutlet var answerLabel : UILabel

@IBAction func calculate(sender : AnyObject) {

      if let intValueA = Int(textFieldA),
            let intValueB = Int(textFieldB) {
            let result = intValueA + intValueB
            answerLabel.text = "The acceleration is \(result)"
      }
      else {
             answerLabel.text = "The value \(intValueA) and/or \(intValueB) are not a valid integer value"
      }        
}

Vermeiden Sie ungültige Werte, indem Sie den Tastaturtyp auf den Nummernblock setzen:

 textFieldA.keyboardType = .numberPad
 textFieldB.keyboardType = .numberPad
7
torcelly

In Swift 4:

extension String {            
    var numberValue:NSNumber? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter.number(from: self)
    }
}
let someFloat = "12".numberValue
5
Ankit garg

ich habe ein einfaches Programm erstellt, in dem Sie zwei Textfelder haben, die Sie vom Benutzer eingeben und hinzufügen, um das Verständnis zu erleichtern. 

@IBOutlet weak var result: UILabel!
@IBOutlet weak var one: UITextField!
@IBOutlet weak var two: UITextField!

@IBAction func add(sender: AnyObject) {        
    let count = Int(one.text!)
    let cal = Int(two.text!)
    let sum = count! + cal!
    result.text = "Sum is \(sum)"
}

hoffe das hilft.

4
AliRaza Qureshi

Swift 3.0

Versuchen Sie dies, Sie müssen nicht nach Bedingungen suchen, die ich getan habe. Verwenden Sie einfach diese Funktion. Senden Sie eine beliebige Zeichenfolge, Nummer, Float, Double usw. Sie erhalten eine Zahl als Wert oder 0, wenn der Wert nicht konvertiert werden kann

Funktion:

func getNumber(number: Any?) -> NSNumber {
    guard let statusNumber:NSNumber = number as? NSNumber else
    {
        guard let statString:String = number as? String else
        {
            return 0
        }
        if let myInteger = Int(statString)
        {
            return NSNumber(value:myInteger)
        }
        else{
            return 0
        }
    }
    return statusNumber
}

Usage: Fügen Sie die obige Funktion in den Code ein und verwenden Sie let myNumber = getNumber(number: myString).__ zum Konvertieren. Wenn die Variable myString eine Zahl oder einen String hat, gibt sie die Nummer zurück, ansonsten 0.

Beispiel 1:

let number:String = "9834"
print("printing number \(getNumber(number: number))")

Ausgabe: printing number 9834

Beispiel 2:

let number:Double = 9834
print("printing number \(getNumber(number: number))")

Ausgabe: printing number 9834

Beispiel 3:

let number = 9834
print("printing number \(getNumber(number: number))")

Ausgabe: printing number 9834

3
Koushik

Latest Swift3 Dieser Code ist einfach, um String in Int zu konvertieren

let myString = "556"
let myInt = Int(myString)
3
user7642519

Über int () und Swift 2.x: Wenn Sie nach der Konvertierung einen Nullwert erhalten, prüfen Sie, ob Sie versuchen, einen String mit einer großen Zahl zu konvertieren (zum Beispiel: 1073741824).

let bytesInternet : Int64 = Int64(bytesInternetString)!
3

In Swift 4.2 und Xcode 10.1

let string:String = "789"
let intValue:Int = Int(string)!
print(intValue)

let integerValue:Int = 789
let stringValue:String = String(integerValue)
    //OR
//let stringValue:String = "\(integerValue)"
print(stringValue)
3
iOS

Da eine Zeichenfolge nicht numerische Zeichen enthalten kann, sollten Sie zum Schutz der Operation eine guard verwenden. Beispiel:

guard let labelInt:Int = Int(labelString) else {
    return
}

useLabelInt()
2
RonTLV
//  To convert user input (i.e string) to int for calculation.I did this , and it works.


    let num:Int? = Int(firstTextField.text!);

    let sum:Int = num!-2

    print(sum);
1
Jenny

für Swift3.x

extension String {
    func toInt(defaultValue: Int) -> Int {
        if let n = Int(self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)) {
            return n
        } else {
            return defaultValue
        }
    }
}
1
User9527

Benutze das:

// get the values from text boxes
    let a:Double = firstText.text.bridgeToObjectiveC().doubleValue
    let b:Double = secondText.text.bridgeToObjectiveC().doubleValue

//  we checking against 0.0, because above function return 0.0 if it gets failed to convert
    if (a != 0.0) && (b != 0.0) {
        var ans = a + b
        answerLabel.text = "Answer is \(ans)"
    } else {
        answerLabel.text = "Input values are not numberic"
    }

OR

Machen Sie aus der XIB oder dem Storyboard Ihren UITextField KeyboardType als DecimalTab und entfernen Sie alle if-Bedingungen, um Berechnungen durchzuführen, z.

var ans = a + b
answerLabel.text = "Answer is \(ans)"

Da der Tastaturtyp DecimalPad ist, besteht keine Möglichkeit, andere 0-9 oder einzugeben.

Ich hoffe das hilft !!

In Swift 2.x wurde die Funktion .toInt () aus String entfernt. Als Ersatz verfügt Int jetzt über einen Initialisierer, der einen String akzeptiert.

Int (meinString)

In Ihrem Fall können Sie Int (textField.text!) Von textField.text! .ToInt () verwenden.

Swift 1.x

let myString: String = "256"
let myInt: Int? = myString.toInt()

Swift 2.x, 3.x

let myString: String = "256"
let myInt: Int? = Int(myString)
1
Azarmanesh

Das funktioniert für mich 

var a:Int? = Int(userInput.text!)
1
Naishta

Nützlich für String bis Int und andere Typen

extension String {
        //Converts String to Int
        public func toInt() -> Int? {
            if let num = NumberFormatter().number(from: self) {
                return num.intValue
            } else {
                return nil
            }
        }

        //Converts String to Double
        public func toDouble() -> Double? {
            if let num = NumberFormatter().number(from: self) {
                return num.doubleValue
            } else {
                return nil
            }
        }

        /// EZSE: Converts String to Float
        public func toFloat() -> Float? {
            if let num = NumberFormatter().number(from: self) {
                return num.floatValue
            } else {
                return nil
            }
        }

        //Converts String to Bool
        public func toBool() -> Bool? {
            return (self as NSString).boolValue
        }
    }

Verwenden Sie es wie folgt:

"123".toInt() // 123
0
Viral Savaliya

Frage: Zeichenfolge "4.0000" kann nicht mit Int ("4.000") in Ganzzahl konvertiert werden?

Antwort: Int () check string ist eine ganze Zahl oder nicht, wenn ja, dann geben Sie eine ganze Zahl und sonst null an. Float oder Double können jedoch eine beliebige Zahlenzeichenfolge in den entsprechenden Float oder Double konvertieren, ohne Null anzugeben. Ein Beispiel: Wenn Sie eine "45" Integer-Zeichenfolge haben, aber bei Verwendung von Float ("45") 45.0 Float-Werte erhalten, oder bei Verwendung von Double ("4567") 45.0.

Lösung: NSString (String: "45.000"). IntegerValue oder Int (Float ("45.000")!)! um ein korrektes Ergebnis zu erhalten.

0
Ravi H Malviya

Meine Lösung ist, eine allgemeine Erweiterung für die Umwandlung von String in int zu haben.

extension String {

 // default: it is a number suitable for your project if the string is not an integer

    func toInt(default: Int) -> Int {
        if let result = Int(self) {
            return result
        }
        else {
            return default  
        }
    }

}
0
flame3

Swift 5.0 und höher

Arbeiten

Wenn Sie die String aufteilen, werden zwei substrings und nicht zwei Strings erstellt. Die folgende Methode sucht nach Any und konvertiert sie in NSNumber. Es ist einfach, eine NSNumber in Int, Float zu konvertieren, je nachdem, welchen Datentyp Sie benötigen.

Tatsächlicher Code

//Convert Any To Number Object Removing Optional Key Word.
public func getNumber(number: Any) -> NSNumber{
 guard let statusNumber:NSNumber = number as? NSNumber  else {
    guard let statString:String = number as? String else {
        guard let statSubStr : Substring = number as? Substring else {
            return 0
        }
        if let myInteger = Int(statSubStr) {
            return NSNumber(value:myInteger)
        }
        else{
            return 0
        }
    }

    if let myInteger = Int(statString) {
        return NSNumber(value:myInteger)
    }
    else if let myFloat = Float(statString) {
        return NSNumber(value:myFloat)
    }else {
        return 0
    }
}
return statusNumber }

Verwendung

if let hourVal = getNumber(number: hourStr) as? Int {

}

String zur Überprüfung übergeben und in Double konvertieren

Double(getNumber(number:  dict["OUT"] ?? 0)
0
Koushik

Ab Swift 3 muss ich mein #% @ erzwingen! string & int mit einem "!" ansonsten funktioniert es einfach nicht.

Zum Beispiel:

let prefs = UserDefaults.standard
var counter: String!
counter = prefs.string(forKey:"counter")
print("counter: \(counter!)")


var counterInt = Int(counter!)
counterInt = counterInt! + 1
print("counterInt: \(counterInt!)")

OUTPUT:
counter: 1
counterInt: 2
0
Sam B

für alternative Lösung. Sie können die Erweiterung als nativen Typ verwenden. Sie können mit Spielplatz testen. 

extension String {
    func add(a: Int) -> Int? {
        if let b = Int(self) {
            return b + a
        }
        else {
            return nil
        }
    }     
}

"2" .add (1)

0
Durul Dalkanat
@IBAction func calculateAclr(_ sender: Any) {
    if let addition = addition(arrayString: [txtBox1.text, txtBox2.text, txtBox3.text]) {
      print("Answer = \(addition)")
      lblAnswer.text = "\(addition)"
    }
}

func addition(arrayString: [Any?]) -> Int? {

    var answer:Int?
    for arrayElement in arrayString {
        if let stringValue = arrayElement, let intValue = Int(stringValue)  {
            answer = (answer ?? 0) + intValue
        }
    }

    return answer
}
0
Krunal

Ein Int in Swift enthält einen Initialisierer, der einen String akzeptiert. Es wird ein optionales Int zurückgegeben. Die Konvertierung kann fehlschlagen, wenn die Zeichenfolge keine Nummer enthält.

Mit einer if-let-Anweisung können Sie überprüfen, ob die Konvertierung erfolgreich war. 

So wird Ihr Code in etwa so: 

@IBOutlet var txtBox1 : UITextField
@IBOutlet var txtBox2 : UITextField
@IBOutlet var txtBox3 : UITextField
@IBOutlet var lblAnswer : UILabel

@IBAction func btn1(sender : AnyObject) {

    let answer1 = "The acceleration is"
    var answer2 = txtBox1
    var answer3 = txtBox2
    var answer4 = txtBox3

    if let intAnswer = Int(txtBox1.text) {
      // Correctly converted
    }
}
0
Patrick

Ich habe vor kurzem das gleiche Problem bekommen. Die folgende Lösung ist Arbeit für mich:

        let strValue = "123"
        let result = (strValue as NSString).integerValue
0
Nirmalsinh