Конвертировать Int в String в Swift

372

Я пытаюсь выяснить, как сделать Int в String в Swift.

Я выясняю обходное решение, используя NSNumber, но мне бы хотелось выяснить, как это сделать в Swift.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue
Теги:
string
casting
converter
int

18 ответов

708
Лучший ответ

Преобразование Int в String:

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

И наоборот: преобразование String в Int:

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

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

Или, если вы используете Swift 2 или 3:

let x: Int? = Int(myString)
  • 2
    Пока это работает, используйте функцию toString , показанную в ответе ниже.
  • 1
    Int кажется, не имеет метода toString() по крайней мере, не в редактировании Xcode 6.2: я вижу, что есть глобальный метод toString ( не Int.toString() ), кто-нибудь знает преимущество перед использованием конструктора String() ?
Показать ещё 5 комментариев
72

Проверьте ниже ответ:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)
  • 43
    ме, это уродливый и ненужный обходной путь, когда String уже имеет конструктор, принимающий Int
  • 3
    что не так вы нашли это? почему вы подавили голосование? @GabrielePetronella
Показать ещё 7 комментариев
41

В Swift 3.0:

var value: Int = 10
var string = String(describing: value)
  • 5
    Это не верно. String(describing:) никогда не должна использоваться ни для чего иного, кроме как для отладки. Это не обычный инициализатор строки.
40

Вот 4 метода:

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

Я могу себе представить, что у некоторых людей будет проблема с ss. Но если вы хотите создать строку, содержащую другой контент, то почему бы и нет.

  • 4
    Я просто смотрю некоторые из новых курсов Stanford U по Swift и iOS 8. Ваш пример var ss = "\(x)" - именно то, как они советовали преобразовать double в строку. Который я думал, было легко и здорово.
  • 0
    И больше думать о sass - это действительно плохо.
Показать ещё 3 комментария
15

Для полноты вы также можете использовать:

let x = 10.description

или любое другое значение, поддерживающее описание.

  • 5
    Это сработало для меня при попытке показать значение в метке. При других подходах всегда было необязательно (0) вместо 0. Спасибо
6

в swift 3.0, мы можем преобразовать Int в String и String в 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)!
  • 1
    В последней строке кода зачем нам восклицательный знак в конце?
  • 0
    @OmarTariq, потому что мы явно сообщаем компилятору, что тип integerValue - Int . тогда не может иметь значение ноль для него. поэтому компилятор говорит вам развернуть его. если вы хотите избежать этого, используйте его как let integerValue = Int(stringValue) . тогда у тебя не будет проблем. Извините за поздний ответ.
Показать ещё 1 комментарий
6

Чтобы сэкономить время и хлопот в будущем, вы можете сделать расширение Int. Обычно я создаю общий файл кода, где я добавляю расширения, перечисления и другие забавные вещи. Вот как выглядит код расширения:

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

Затем, когда вы захотите преобразовать int в строку, вы можете просто сделать что-то вроде:

var myNumber = 0
var myNumberAsString = myNumber.toString()
  • 0
    Потенциально глупый вопрос, но должна ли это быть функция или вычисляемая переменная? Я не могу вспомнить, какой Swift обычно использует в этих случаях - это toInt или toInt() .
  • 1
    Чтобы сэкономить время и myNumber.description просто используйте myNumber.description . Не нужно никаких расширений.
6

по какой-то причине принятый ответ не сработал у меня. Я пошел с таким подходом:

var myInt:Int = 10
var myString:String = toString(myInt)
  • 1
    Да .. та же проблема .. принятый ответ не работает .. ваш ответ работает для меня ..
5

Несколько способов сделать это:

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)
3

Swift 4:

let x:Int = 45
let str:String = String(describing: x)
  • 9
    Благодарю. Что за бессмысленные переломные изменения .....
  • 2
    результат Необязательно (1)
Показать ещё 8 комментариев
2

iam, используя этот простой подход

String to Int:

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

и от Int до строки:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"
1
let a =123456888
var str = String(a)

ИЛИ

var str = a as! String
1

Преобразование Unicode Int в строку

Для тех, кто хочет преобразовать строку Int в строку Unicode, вы можете сделать следующее:

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

Или, альтернативно:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}
  • 0
    @jvarela, это все еще работает. Я только что проверил это в Xcode 8.2 (Swift 3.0.2). Инициализатор String может принимать UnicodeScalar .
0

Преобразование String в Int

var numberA = Int("10")

Print(numberA) // It will print 10

К скрытому Int в строку

var numberA = 10

1-й путь)

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

Второй путь)

var strSomeNumber = String(numberA)

или

var strSomeNumber = "\(numberA)"
0

let Str = "12" let num: Int = 0 num = Int (str)

0

exampleLabel.text = String(yourInt)

-2

В swift 3.0 вы можете изменить целое число на строку, как указано ниже

let a:String = String(stringInterpolationSegment: 15)

Другой способ -

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

//или любое целое число вместо 15

  • 1
    Из ссылки на API "Не вызывайте этот инициализатор напрямую. Он используется компилятором при интерпретации интерполяции строк." Может быть, вы хотите перепроверить, если вы используете его где-нибудь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню