Konvertieren Sie Int in String in Swift


554

Ich versuche herauszufinden, wie man Intein Stringin Swift verwandelt.

Ich NSNumberfinde eine Problemumgehung heraus, aber ich würde gerne herausfinden, wie man das alles in Swift macht.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue

Antworten:


961

Konvertieren Intin String:

let x : Int = 42
var myString = String(x)

Und umgekehrt - konvertieren Stringzu Int:

let myString : String = "42"
let x: Int? = myString.toInt()

if (x != nil) {
    // Successfully converted String to Int
}

Oder wenn Sie Swift 2 oder 3 verwenden:

let x: Int? = Int(myString)

2
Verwenden Sie toStringwährenddessen die in der folgenden Antwort gezeigte Funktion.
Ybakos

2
Intscheint keine toString()Methode zu haben, zumindest nicht in Xcode 6.2 edit: Ich sehe, dass es eine globale toStringMethode gibt ( nicht Int.toString() ), kennt jemand den Vorteil gegenüber der Verwendung des String()Konstruktors?
Nilloc

Beachten Sie, dass String(Int?)"Optional (Int)", zumindest in Swift 2, nicht das sein kann, was Sie gemeint haben. Verwenden Sie stattdessenInt?.description
Teejay

Wunderbar, funktioniert aber bei mir nicht. Ich habe ein optionales Int und String (myInt) wird nicht kompiliert - es behauptet "Int? Kann nicht in String konvertiert werden". Es stehen mir auch keine Methoden toString () oder toInt () zur Verfügung, oder stringValue und intValue sind nicht vorhanden. Sogar ein String (myInt!) Sagt mir, dass der Initialisierer in einen String umbenannt wurde (Beschreibung: myInt!).
Motti Shneor

9
Für Swift 4 siehe die Antwort von Hamed Gh unten. Die korrekte Verwendung istString(describing: x)
David Gay

92

Überprüfen Sie die folgende Antwort:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)

45
meh, dies ist eine hässliche und unnötige Problemumgehung, wenn Stringbereits ein Konstruktor akzeptiertInt
Gabriele Petronella

3
Was ist falsch daran, dass du das findest? Warum hast du abgestimmt? @ GabrielePetronella
PREMKUMAR

2
Es ist nur ein schrecklicher Weg, um das gewünschte Ergebnis zu erzielen. Die Antwort ist jedoch technisch korrekt, und aus diesem Grund habe ich nicht abgelehnt.
Gabriele Petronella

Ich denke nicht, dass dies besonders hässlich ist, außer dass einige Parsing-Tools die String-Interpolation möglicherweise nicht gut handhaben. Sonst wer weiß - es könnte schneller gehen. Die Verwendung von "" + x in Javascript ist im Allgemeinen schneller als beispielsweise die Verwendung eines String-Konstruktors. Dieses Beispiel ist nur ein paar Zeichen kürzer, aber ich würde sicherlich die Zeichenfolgeninterpolation in Fällen bevorzugen, in denen Sie einen Satz aus mehreren Variablen erstellt haben.
Desty

1
Ich würde diese Antwort nicht ablehnen, nur weil sie hässlich ist, aber wie @GabrielePetronella sagte, ist es nicht erforderlich, eine String-Interpolation zu verwenden, wenn Stringein Konstruktor einen akzeptiert Int. Es ist viel klarer und prägnanter.
Isuru

58

Hier sind 4 Methoden:

var x = 34
var s = String(x)
var ss = "\(x)"
var sss = toString(x)
var ssss = x.description

Ich kann mir vorstellen, dass einige Leute ein Problem mit ss haben werden. Wenn Sie jedoch eine Zeichenfolge mit anderen Inhalten erstellen möchten, warum nicht?


5
Ich schaue mir gerade einen Teil des neuen Stanford U-Kurses für Swift und iOS 8 an. Ihr var ss = "\(x)"Beispiel ist genau, wie sie empfohlen haben, ein Double in einen String umzuwandeln. Was ich einfach und großartig fand.
Markhunte

Und mehr über Sass nachdenken - das ist wirklich schlimm.
Ian Bradbury

2
toString wurde in String
Jirson Tavera

1
s ist jetzt (Swift 3.1) String (beschreibt: x) Die ältere Syntax führt zu einem Compilerfehler.
Motti Shneor

3
@MottiShneor Nein, das ist falsch. String(describing:)sollte niemals für etwas anderes als das Debuggen verwendet werden. Es ist nicht der normale String-Initialisierer.
Eric Aya

55

In Swift 3.0 :

var value: Int = 10
var string = String(describing: value)

7
Das ist falsch. String(describing:)sollte niemals für etwas anderes als das Debuggen verwendet werden. Es ist nicht der normale String-Initialisierer.
Eric Aya

Ist das in Swift 5 immer noch falsch? @ayaio, weil aufgrund der Dokumentation scheint es nicht falsch
Zonily Jame

27

Swift 4 :

let x:Int = 45
let str:String = String(describing: x)

Developer.Apple.com> String> init (beschreibt :)

Der String-Initialisierer (Beschreibung :) ist der bevorzugte Weg, um eine Instanz eines beliebigen Typs in einen String zu konvertieren.

Benutzerdefinierte Zeichenfolge konvertierbar

Geben Sie hier die Bildbeschreibung ein


3
Ergebnis Optional (1)
Harshil Kotecha

11
Das ist falsch. String(describing:)sollte niemals für etwas anderes als das Debuggen verwendet werden. Es ist nicht der normale String-Initialisierer.
Eric Aya

3
Hamed Gh, Morithz liefert bereits die richtige Antwort in derselben Frage. Überprüfen Sie meine Antwort. Verwenden Sie einfach den normalen String () -Initialisierer. Aber geben Sie es nicht optional, zuerst auspacken. Oder, wie in Ihrem Beispiel, verwenden Sie ??. So: let str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Schauen Sie sich die Beispiele in dem Link an, den Sie selbst geben. Die describingMethode ist hier, um ... ihren Inhalt zu beschreiben . Es gibt eine Beschreibung. Manchmal ist es dasselbe wie bei der Konvertierung, manchmal nicht . Geben Sie eine Option an describingund Sie werden das Ergebnis sehen ... Es wird keine Konvertierung sein. Es gibt eine einfache, dedizierte Methode zum Konvertieren: Verwenden des normalen String-Initialisierers, wie in anderen Antworten erläutert. Lesen Sie die vollständige Seite, auf die Sie verlinken: Sehen Sie, dass diese Methode auf verschiedene Weise nach Beschreibungen sucht , von denen einige falsche Ergebnisse liefern würden, wenn Sie eine genaue Konvertierung erwarten.
Eric Aya

2
Sie sollten den beschreibenden Teil dieser Antwort wirklich entfernen. Die Konvertierung sollte ohne Verwendung eines Parameternamens im String-Konstruktor erfolgen.
TimTwoToes

26

Der Vollständigkeit halber können Sie auch Folgendes verwenden:

let x = 10.description

oder ein anderer Wert, der eine Beschreibung unterstützt.


5
Dies funktionierte bei mir, als ich versuchte, den Wert in einem Etikett anzuzeigen. Bei den anderen Ansätzen war es immer Optional (0) statt 0. Danke
Hardcore_Graverobber

11

Swift 4:

Es wird versucht, den Wert in label ohne das Wort Optional () anzuzeigen.

hier ist x ein Int-Wert mit.

let str:String = String(x ?? 0)

3
Nein String(describing:)sollte niemals für etwas anderes als das Debuggen verwendet werden. Es ist nicht der normale String-Initialisierer.
Eric Aya

Hallo @Moritz, was kann ich tun, um optionales Wort zu entfernen? Ich habe einen Int-Wert und dann möchte ich in Etikett drucken
Harshil Kotecha

Verwenden Sie einfach den normalen String()Initialisierer. Aber geben Sie es nicht optional, zuerst auspacken. Oder verwenden Sie wie in Ihrem Beispiel ??. So:let str = String(x ?? 0)
Eric Aya

developer.apple.com/documentation/swift/string/2427941-init Ich verstehe Ihren Punkt, was die Verwendung der Beschreibung
Harshil Kotecha

Es ist hauptsächlich für Debugging-Zwecke. Sie können den Namen von Klassen beschreiben, die Beschreibung von Instanzen abrufen usw. Sie sollten jedoch niemals für Zeichenfolgen verwendet werden, die in der App selbst verwendet werden.
Eric Aya

8

Um sich Zeit und Ärger in der Zukunft zu sparen, können Sie eine Int-Erweiterung vornehmen. Normalerweise erstelle ich eine gemeinsam genutzte Codedatei, in der ich Erweiterungen, Aufzählungen und andere lustige Dinge ablege. So sieht der Erweiterungscode aus:

extension Int
{
    func toString() -> String
    {
        var myString = String(self)
        return myString
    }
}

Wenn Sie später ein int in einen String konvertieren möchten, können Sie einfach Folgendes tun:

var myNumber = 0
var myNumberAsString = myNumber.toString()

Möglicherweise dumme Frage, aber sollte dies eine Funktion oder eine berechnete Variable sein? Ich kann mich nicht erinnern, welches Swift in diesen Fällen normalerweise verwendet - toIntoder toInt()?
Maury Markowitz

1
Um sich Zeit und Ärger zu sparen, verwenden Sie einfach myNumber.description. Keine Erweiterungen erforderlich.
Nyg

8

In Swift 3.0 können wir auf diese Weise Intnach Stringund Stringnach konvertierenInt

//convert Integer to String in Swift 3.0

let theIntegerValue :Int = 123  // this can be var also
let theStringValue :String = String(theIntegerValue)


//convert String to Integere in Swift 3.0


let stringValue : String = "123"
let integerValue : Int = Int(stringValue)!

1
Warum brauchen wir in der letzten Zeile des Codes am Ende ein Ausrufezeichen?
Omar Tariq

@OmarTariq, weil wir dem Compiler explizit mitteilen, dass der integerValueTyp ist Int. dann kann es keinen Nullwert dafür geben. Der Compiler fordert Sie also auf, es zu entpacken. Wenn Sie dies vermeiden möchten, verwenden Sie es wie let integerValue = Int(stringValue). dann bekommst du kein Problem. Entschuldigung für die späte Antwort.
Chanaka Caldera

1
@OmarTariq Das Auspacken kann in diesem Fall sehr schlecht sein. Wenn die Zeichenfolge keine Zahl ist, stürzt Ihre Anwendung ab. Sie sollten wirklich überprüfen, ob dies gültig ist, und es nicht zwangsweise auspacken.
Charlie Fish

7

Aus irgendeinem Grund hat die akzeptierte Antwort bei mir nicht funktioniert. Ich habe diesen Ansatz gewählt:

var myInt:Int = 10
var myString:String = toString(myInt)

5

Mehrere Möglichkeiten, dies zu tun:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)

4

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)

2

Ich benutze diesen einfachen Ansatz

String zu Int:

 var a = Int()
var string1 = String("1")
a = string1.toInt()

und von Int zu String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"

2

Konvertieren Sie Unicode Int in String

Für diejenigen, die ein Int in eine Unicode-Zeichenfolge konvertieren möchten, können Sie Folgendes tun:

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else {
    return ""
}

// convert UnicodeScalar to String
let myString = String(myUnicodeScalar)

// results
print(myString) // a

Oder alternativ:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}

@jvarela, das funktioniert immer noch. Ich habe es gerade in Xcode 8.2 (Swift 3.0.2) erneut getestet. Der StringInitialisierer kann a UnicodeScalar.
Suragch


0

So konvertieren Sie String in Int

var numberA = Int("10")

Print(numberA) // It will print 10

Int in String umwandeln

var numberA = 10

1. Weg)

print("numberA is \(numberA)") // It will print 10

2. Weg)

var strSomeNumber = String(numberA)

oder

var strSomeNumber = "\(numberA)"


0

In Swift 3.0 können Sie die Ganzzahl wie unten angegeben in eine Zeichenfolge ändern

let a:String = String(stringInterpolationSegment: 15)

Ein anderer Weg ist

let number: Int = 15
let _numberInStringFormate: String = String(number)

// oder eine beliebige Ganzzahl anstelle von 15


1
Aus der API-Referenz "Rufen Sie diesen Initialisierer nicht direkt auf. Er wird vom Compiler bei der Interpretation von Zeichenfolgeninterpolationen verwendet." Vielleicht möchten Sie noch einmal überprüfen, ob Sie es irgendwo verwenden.
Rahul Sharma

0

Ich bevorzuge die String-Interpolation

let x = 45
let string = "\(x)"

Jedes Objekt hat eine Zeichenfolgendarstellung. Das macht die Sache einfacher. Zum Beispiel, wenn Sie einige Stringmit mehreren Werten erstellen müssen . Sie können auch beliebig rechnen oder einige Bedingungen verwenden

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"

0

Wenn Sie eine schnelle Erweiterung mögen, können Sie folgenden Code hinzufügen

extension Int
{
    var string:String {
        get {
            return String(self)
        }
    }
}

Dann können Sie eine Zeichenfolge mit der gerade hinzugefügten Methode abrufen

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.