399 Stimmen

Umrechnen von String in Int mit Swift

Die Anwendung berechnet im Wesentlichen die Beschleunigung, indem sie Anfangs- und Endgeschwindigkeit sowie Zeit eingibt und dann eine Formel zur Berechnung der Beschleunigung verwendet. Da die Werte in den Textfeldern Zeichenketten 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 = "Die Beschleunigung beträgt"
    var answer2 = txtBox1
    var answer3 = txtBox2
    var answer4 = txtBox3

369voto

Aktualisierte Antwort für Swift 2.0+:

toInt() Methode gibt einen Fehler aus, da sie aus String in Swift 2.x entfernt wurde. Stattdessen hat der Int Typ jetzt einen Initialisierer, der einen String akzeptiert:

let a: Int? = Int(firstTextField.text)
let b: Int? = Int(secondTextField.text)

344voto

Narendar Singh Saini Punkte 3525

Grundidee, beachten Sie, dass dies nur in Swift 1.x funktioniert (überprüfen Sie ParaSaras Antwort um zu sehen, wie es in Swift 2.x funktioniert):

// toInt gibt ein Optionales zurück, deshalb haben wir a:Int? verwendet
let a:Int? = firstText.text.toInt() // firstText ist UITextField
let b:Int? = secondText.text.toInt() // secondText ist UITextField

// Überprüfe a und b vor dem Entpacken mit !
if a && b {
    var ans = a! + b!
    answerLabel.text = "Die Antwort ist \(ans)" // answerLabel ist UILabel
} else {
    answerLabel.text = "Eingegebene Werte sind nicht numerisch"
}

Update für Swift 4

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

92voto

Kumar KL Punkte 15176

myString.toInt() - konvertiere den String-Wert in eine Ganzzahl.

Swift 3.x

Wenn Sie eine Ganzzahl in einem String versteckt haben, können Sie sie umwandeln, indem Sie den Konstruktor der Ganzzahl verwenden, wie hier:

let myInt = Int(textField.text)

Wie bei anderen Datentypen (Float und Double) können Sie auch durch Verwendung von NSString umwandeln:

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

37voto

Abaho Katabarwa Punkte 379

Sie können NSNumberFormatter().numberFromString(yourNumberString) verwenden. Es ist großartig, weil es ein Optionales zurückgibt, das Sie dann mit if let 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
    // tun, was Sie mit myInt tun müssen
} else {
    // welchen Fehlercode Sie auch schreiben müssen
}

Swift 5

var myString = "\(10)"
if let myNumber = NumberFormatter().number(from: myString) {
    var myInt = myNumber.intValue
    // tun, was Sie mit myInt tun müssen
  } else {
    // welchen Fehlercode Sie auch schreiben müssen
  }

33voto

Leo Dabus Punkte 215103

Bearbeiten/Aktualisierung: Xcode 11.4 • Swift 5.2

Bitte überprüfen Sie die Kommentare im Code


Dateiinhalt von IntegerField.swift:

import UIKit

class IntegerField: UITextField {

    // gibt den Inhalt des Textfeldes zurück, entfernt nicht-numerische Zeichen und konvertiert das Ergebnis in einen Integer-Wert
    var value: Int { string.digits.integer ?? 0 }

    var maxValue: Int = 999_999_999
    private var lastValue: Int = 0

    override func willMove(toSuperview newSuperview: UIView?) {
        // fügt dem Textfeld ein Ziel hinzu, um Änderungen im Text zu überwachen
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        // legt die Tastatur auf nur Zahlen
        keyboardType = .numberPad
        // legt die Textausrichtung auf rechts
        textAlignment = .right
        // sendet eine editingChanged-Aktion, um das Textfeld zur Aktualisierung zu zwingen
        sendActions(for: .editingChanged)
    }

    // löscht die letzte Ziffer im Textfeld
    override func deleteBackward() {
        // beachten Sie, dass der Feld-Textwert standardmäßig ein leerer String ist, sodass das Entpacken seines Werts sicher ist
        // beachten Sie auch, dass collection remove at eine nicht leere Collection erfordert, was in diesem Fall ebenfalls zutrifft, sodass keine Prüfung erforderlich ist, ob die Collection nicht leer ist.
        text!.remove(at: text!.index(before: text!.endIndex))
        // sendet eine editingChanged-Aktion, um das Textfeld zur Aktualisierung zu zwingen
        sendActions(for: .editingChanged)
    }

    @objc func editingChanged() {
        guard value <= maxValue else {
            text = Formatter.decimal.string(for: lastValue)
            return
        }
        // Dadurch wird das Textfeld entsprechend der gerätespezifischen Lokalisierung und Einstellungen formatiert
        text = Formatter.decimal.string(for: value)
        print("Wert:", value)
        lastValue = value
    }
}

Sie müssen auch diese Erweiterungen zu Ihrem Projekt hinzufügen:


Dateiinhalt von Extensions UITextField.swift:

import UIKit
extension UITextField {
    var string: String { text ?? "" }
}

Dateiinhalt von Extensions Formatter.swift:

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

Dateiinhalt von Extensions NumberFormatter.swift:

import Foundation
extension NumberFormatter {
    convenience init(numberStyle: Style) {
        self.init()
        self.numberStyle = numberStyle
    }
}

Dateiinhalt von Extensions StringProtocol.swift:

extension StringProtocol where Self: RangeReplaceableCollection {
    var digits: Self { filter(\.isWholeNumber) }
    var integer: Int? { Int(self) }
}

Beispielprojekt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X