Convert Int to String in Swift
Asked Answered
S

23

671

I'm trying to work out how to cast an Int into a String in Swift.

I figure out a workaround, using NSNumber but I'd love to figure out how to do it all in Swift.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue
Shitty answered 11/6, 2014 at 11:5 Comment(0)
P
1125

Converting Int to String:

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

And the other way around - converting String to Int:

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

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

Or if you're using Swift 2 or 3:

let x: Int? = Int(myString)
Pronunciation answered 11/6, 2014 at 11:8 Comment(5)
While this works, use the toString function, shown in an answer below.Our
Int doesn't appear to have a toString() method at least not in Xcode 6.2 edit: I see that there is a global toString method (not Int.toString()), anyone know the advantage over using the String() constructor?Outcry
Note that String(Int?) writes "Optional(Int)", at least in Swift 2, that could not be what you meant. Use instead Int?.descriptionAmaras
Wonderful, but doesn't work for me. I have an optional Int, and String(myInt) wont compile - it claims "Int? cannot be converted to String". There are no toString() or toInt() methods available for me either, or stringValue and intValue not there. Even a String(myInt!) will tell me that the initializer has been renamed to something like String(describing: myInt!).Tiptoe
For Swift 4, see Hamed Gh's answer below. The correct usage is String(describing: x)Danita
F
99

Check the Below Answer:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)
Fluxion answered 11/6, 2014 at 11:11 Comment(7)
meh, this is an ugly and unnecessary workaround when String already has a constructor accepting IntBriquette
what wrong you find this? why you put down vote? @GabrielePetronellaFluxion
I don't think this is particularly ugly, except that some parsing tools may not handle string interpolation nicely. Otherwise, who knows -- it might faster. Using ""+x in Javascript is generally faster than using a String constructor, for example. This example is only a couple of characters shorter, but I would certainly prefer string interpolation in cases where you were constructing a sentence from several variables.Missend
I wouldn't downvote this answer just because its ugly but as @GabrielePetronella said, there's no need to use string interpolation when String has a constructor that accepts an Int. Its much more clear and concise.Genteel
String(varName) didn't work for me for NSIndexPath, but the above syntax worked.Autoroute
How is this uglier than array literals?Paranoia
Well the other ways are much uglier - now my only way is String(describing: myInt!). if that's not ugly... what is???Tiptoe
I
69

Here are 4 methods:

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

I can imagine that some people will have an issue with ss. But if you were looking to build a string containing other content then why not.

Irrefrangible answered 28/1, 2015 at 22:4 Comment(5)
I just watch some of the Stanford U new course on Swift and iOS 8. Your var ss = "\(x)" example is exactly how they advised converting a double to a string. Which I thought was easy and great.Quark
And thinking more about sass - that's really bad.Irrefrangible
toString has been renamed to StringJeremy
s is now (Swift 3.1) String(describing: x) the older syntax yields compiler error.Tiptoe
@MottiShneor No, this is wrong. String(describing:) should never be used for anything else than debugging. It is not the normal String initializer.Kamseen
G
55

In Swift 3.0:

var value: Int = 10
var string = String(describing: value)
Gimcrackery answered 2/12, 2016 at 19:41 Comment(3)
This is wrong. String(describing:) should never be used for anything else than debugging. It is not the normal String initializer.Kamseen
Is this still wrong in Swift 5? @ayaio, cause basing from documentation it doesn't seem wrongLactoscope
I would imagine so? it shouldn't be used for banch of different reasons, though, like for veing much too powerful for task on handsKendry
A
33

Swift 4:

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

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

The String(describing:) initializer is the preferred way to convert an instance of any type to a string.

Custom String Convertible

enter image description here

Accipitrine answered 26/10, 2017 at 16:23 Comment(9)
result Optional(1)Dimmick
This is wrong. String(describing:) should never be used for anything else than debugging. It is not the normal String initializer.Kamseen
@Moritz Could you provide a reference, please?Accipitrine
@Harshil Its depends on your input 'x'Accipitrine
Hamed Gh, Morithz already provide right answer in same question check my answer Just use the normal String() initializer. But don't give it an optional, unwrap first. Or, like in your example, use ??. Like this: let str = String(x ?? 0)Dimmick
@HamedGh Look at the examples in the link you give yourself. The describing method is here to... describe its content. It gives a description. Sometimes it's the same as the conversion, sometimes not. Give an optional to describing and you'll see the result... It will not be a conversion. There's a simple, dedicated way to convert: using the normal String initializer, as explained in other answers. Read the complete page that you link to: see that this method searches for descriptions using different ways, some of which would give wrong results if you expect accurate conversion..Kamseen
@HamedGh I'm not here to say you're wrong for the pleasure of doing it. But I care about an answer that is wrong and which gives wrong example to beginners and users. Having 20 upvotes on this means that at least 20 people now wrongly believe that describing is the correct way to convert, because of you. This is not ok. :(Kamseen
You really should remove the describing part of this answer. Conversion should be done without using any parameter name in the String constructor.Lynching
@Lynching you should really mention your resource. As I quote "The String(describing:) initializer is the preferred way to convert an instance of any type to a string."Accipitrine
G
31

Just for completeness, you can also use:

let x = 10.description

or any other value that supports a description.

Grindelia answered 30/12, 2014 at 15:44 Comment(1)
This worked for me when trying to show the value in a label. With the other approaches it was always Optional(0) instead of 0. Thank youKithara
D
12

Swift 4:

Trying to show the value in label without Optional() word.

here x is a Int value using.

let str:String = String(x ?? 0)
Dimmick answered 31/3, 2018 at 6:5 Comment(5)
No. String(describing:) should never be used for anything else than debugging. It is not the normal String initializer.Kamseen
Hello @Moritz so what can i do for remove optional word ? i have a Int value and than i want to print in labelDimmick
Just use the normal String() initializer. But don't give it an optional, unwrap first. Or, like in your example, use ??. Like this: let str = String(x ?? 0)Kamseen
developer.apple.com/documentation/swift/string/2427941-init i understand your point what is the use of describingDimmick
It's mostly for debugging purposes. You can describe the name of classes, get the description of instances, etc. But it should never be used for strings that are used in the app itself.Kamseen
B
10

To save yourself time and hassle in the future you can make an Int extension. Typically I create a shared code file where I put extensions, enums, and other fun stuff. Here is what the extension code looks like:

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

Then later when you want to convert an int to a string you can just do something like:

var myNumber = 0
var myNumberAsString = myNumber.toString()
Balkhash answered 17/3, 2015 at 15:34 Comment(2)
Potentially stupid question, but should this be a function, or a computed variable? I can't recall which one Swift normally uses in these cases - is it toInt or toInt().Wamble
To save yourself some time and hassle just use myNumber.description. No need for any extensions.Arrington
G
10

in swift 3.0 this is how we can convert Int to String and String to Int

//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)!
Goblet answered 8/10, 2016 at 18:4 Comment(3)
In the last line of the code, why do we need an exclamation mark at the end?Amplifier
@OmarTariq, because we explicitly tells the compiler that the integerValue's type is Int. then cannot have a nil value for it. so compiler tells you to unwrap it. if you want to avoid this , use it like let integerValue = Int(stringValue). then you won't get a problem. sorry for the late reply.Goblet
@OmarTariq Unwrapping in this case can be really bad. If the string isn't a number this will crash your application. You should really check to ensure that is valid and not force unwrap it.Sportsman
S
8

for whatever reason the accepted answer did not work for me. I went with this approach:

var myInt:Int = 10
var myString:String = toString(myInt)
Scabble answered 14/12, 2014 at 9:10 Comment(0)
A
7
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Amaze answered 24/4, 2020 at 11:18 Comment(0)
P
6

Multiple ways to do this :

var str1:String="\(23)"
var str2:String=String(format:"%d",234)
Polyphone answered 5/2, 2015 at 22:37 Comment(0)
M
6

Swift String performance

A little bit about performance UI Testing Bundle on iPhone 7(real device) with iOS 14

let i = 0
lt result1 = String(i) //0.56s 5890kB
lt result2 = "\(i)" //0.624s 5900kB
lt result3 = i.description //0.758s 5890kB
import XCTest

class ConvertIntToStringTests: XCTestCase {
    let count = 1_000_000
    
    func measureFunction(_ block: () -> Void) {
        let metrics: [XCTMetric] = [
            XCTClockMetric(),
            XCTMemoryMetric()
        ]
        let measureOptions = XCTMeasureOptions.default
        measureOptions.iterationCount = 5
        
        measure(metrics: metrics, options: measureOptions) {
            block()
        }
    }

    func testIntToStringConstructor() {
        var result = ""
        measureFunction {
            for i in 0...count {
                result += String(i)
            }
        }
    }
    
    func testIntToStringInterpolation() {
        var result = ""
        measureFunction {
            for i in 0...count {
                result += "\(i)"
            }
        }
    }
    
    func testIntToStringDescription() {
        var result = ""
        measureFunction {
            for i in 0...count {
                result += i.description
            }
        }
    }
}
Muirhead answered 14/11, 2020 at 19:46 Comment(0)
M
5

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)
Musquash answered 15/9, 2015 at 18:52 Comment(0)
C
3

iam using this simple approach

String to Int:

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

and from Int to String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"
Caiman answered 13/4, 2015 at 6:28 Comment(0)
N
3

Convert Unicode Int to String

For those who want to convert an Int to a Unicode string, you can do the following:

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

Or alternatively:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}
Nellynelms answered 22/9, 2016 at 10:42 Comment(1)
@jvarela, This does still work. I just retested it in Xcode 8.2 (Swift 3.0.2). The String initializer can take a UnicodeScalar.Nellynelms
N
3

I prefer using String Interpolation

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

Each object has some string representation. This makes things simpler. For example if you need to create some String with multiple values. You can also do any math in it or use some conditions

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"
Nardoo answered 5/3, 2019 at 10:1 Comment(0)
B
2

exampleLabel.text = String(yourInt)

Bloomer answered 10/5, 2015 at 5:12 Comment(0)
E
2

If you like swift extension, you can add following code

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

then, you can get string by the method you just added

var x = 1234
var s = x.string
Exalted answered 3/8, 2019 at 3:5 Comment(0)
P
1

To convert String into Int

var numberA = Int("10")

Print(numberA) // It will print 10

To covert Int into String

var numberA = 10

1st way)

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

2nd way)

var strSomeNumber = String(numberA)

or

var strSomeNumber = "\(numberA)"
Postbox answered 6/1, 2017 at 13:8 Comment(0)
W
1

In swift 3.0, you may change integer to string as given below

let a:String = String(stringInterpolationSegment: 15)

Another way is

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

//or any integer number in place of 15

Weakfish answered 8/2, 2017 at 9:21 Comment(1)
From API reference "Do not call this initializer directly. It is used by the compiler when interpreting string interpolations." May be you want to double check if you are using it somewhere.Baggott
A
1
let a =123456888
var str = String(a)

OR

var str = a as! String
And answered 28/5, 2017 at 12:47 Comment(0)
G
0
let Str = "12"
let num: Int = 0
num = Int (str)
Gwendagwendolen answered 18/1, 2016 at 3:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.