How to Convert Int to String and Vice Versa in Swift

How to Convert Int to String and Vice Versa in Swift

Written by

in

Quick answer: The most idiomatic way to convert an Int to a String in Swift is using the String initializer: String(myInt). Alternatively, you can use string interpolation: "\(myInt)". To convert a String back to an Int, use the Int initializer: Int(myString), which returns an optional Int?.

Why Type Conversion is Necessary in Swift

Swift is a strongly typed language. This means that variables are strictly bound to a specific data type—an Int is fundamentally different from a String. You cannot directly assign an Int value to a String variable, nor vice versa, without an explicit conversion process. This strict typing prevents runtime errors and ensures that operations are performed on the correct data structure.

When a developer needs to display a number in a user interface (which requires a String) or needs to perform mathematical operations on a value read from user input (which requires an Int), they must explicitly bridge the gap between these types. While older approaches sometimes involved casting to NSNumber, modern Swift provides cleaner, safer, and more performant native initializers for these conversions.

How to Convert Data Types

Converting Int to String

There are two primary, idiomatic ways to convert an integer into its string representation in Swift. Both methods are highly recommended over using NSNumber casting, as they are cleaner and more aligned with Swift’s design philosophy.

1. Using the String Initializer (Recommended)

The most direct and explicit way to perform the conversion is by calling the String initializer and passing the integer as an argument. This method is clear and efficient.

let age: Int = 35
let ageString: String = String(age)
print(ageString)
// Output: "35"

2. Using String Interpolation

Swift allows you to embed variables directly within string literals using the \() syntax. This is often the most concise method when you are constructing a larger string that includes the number.

let score: Int = 98
let message: String = "Your final score is \(score)."
print(message)
// Output: "Your final score is 98."

Converting String to Int

Converting a string back into a numerical type is slightly more complex because a string might not contain a valid integer (e.g., “hello” or “3.14”). Therefore, the conversion process must handle potential failure.

Using the Int Initializer (The Standard Approach)

When you initialize an Int with a String, Swift returns an optional Int?. This optional wrapper is crucial because it forces the developer to handle the possibility that the conversion fails.

let inputString: String = "1024"

// Attempt conversion
if let number = Int(inputString) { 
    print("Successfully converted to Int: \(number)") 
} else {
    print("Conversion failed: Input was not a valid integer.")
}

// Example of failure handling
let invalidString: String = "abc"
if let number = Int(invalidString) { 
    // This block will not execute
} else {
    print("Conversion failed for \(invalidString)") // Output: Conversion failed for abc
}

Note on String.toInt(): While some developers may encounter extensions like String.toInt(), this is not part of the standard Swift library. Rely on the Int(string) initializer for guaranteed compatibility and safety.

How to Prevent Conversion Issues

To ensure your code is robust and avoids unexpected crashes or incorrect data handling, follow these practices:

  • Always Use Initializers: Prefer String(int) and Int(string) over manual casting methods. They are type-safe and idiomatic.
  • Handle Optionals: When converting String to Int, always use if let or guard let to safely unwrap the optional result. Never force unwrap (!) the result of Int(string) unless you are absolutely certain the input is valid.
  • Validate Input: If the string originates from a user or an external API, implement preliminary checks (e.g., using regular expressions) to ensure the input matches the expected numeric format before attempting conversion.

Frequently Asked Questions

Can I convert a Double to a String?

Yes. Like all fundamental types, Double can be converted to String using the String initializer: String(myDouble). This is the standard way to format floating-point numbers for display.

What is the difference between String(x) and \(x)?

Both achieve the same result—converting the Int to a String. String(x) is a direct type conversion call, while \(x) is string interpolation. Interpolation is generally preferred when the number is part of a larger sentence or message, as it is more concise.

Does Int(string) ever return nil?

Yes. Int(string) returns nil if the string cannot be parsed as a valid integer. This happens if the string is empty, contains non-numeric characters, or represents a number outside the range of a standard Swift Int.

Sources & credits

Parts of this guide are adapted from content licensed under CC BY-SA 3.0; this article is shared under the same license.