Swift Как бросить из Int? нанизывать

В Swift я не могу преобразовать Int в String:

var iString:Int = 100
var strString = String(iString)

Но моя переменная в Int?, там для ошибки: Cant invoke 'init' with type '@Ivalue Int?'

Пример

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

if (x != null) {
    // Successfully converted String to Int
    //And how do can i convert x to string???
}

Ответы

Ответ 1

Вы можете использовать интерполяцию строк.

let x = 100
let str = "\(x)"

Если x является необязательным, вы можете использовать optional binding

var str = ""
if let v = x {
   str = "\(v)"
}
println(str)

если вы уверены, что x никогда не будет nil, вы можете сделать forced unwrapping на optional value.

var str = "\(x!)"

В одном заявлении вы можете попробовать это

let str = x != nil ? "\(x!)" : ""

На основе комментария @RealMae вы можете сократить этот код, используя nil coalescing operator (??)

let str = x ?? ""

Ответ 2

Мне нравится создавать для этого небольшие расширения:

extension Int {
    var stringValue:String {
        return "\(self)"
    }
}

Это позволяет вызывать необязательные ints без необходимости разворачивать и думать о значениях nil:

var string = optionalInt?.stringValue

Ответ 3

Если вам нужен однострочник, это можно сделать следующим образом:

let x: Int? = 10
x.flatMap { String($0) } // produces "10"
let y: Int? = nil
y.flatMap { String($0) } // produces nil

если вам нужно значение по умолчанию, вы можете просто перейти с

(y.flatMap { String($0) }) ?? ""

EDIT:

Еще лучше без фигурных скобок:

y.flatMap(String.init)

Apple flatMap (_ :) Документация

Ответ 4

Дополнительно Int → Необязательная строка:

Если x: Int? (или Double? - не имеет значения)

var s = x.map({String($0)})

Это вернет String?

Чтобы получить String, вы можете использовать:

var t = s ?? ""

Ответ 5

Возможно, грудь, но вы можете просто сделать:

let int100 = 100
println(int100.description) //Prints 100

Ответ 6

Sonrobby, я считаю, что "Int?" означает необязательный int. В принципе, по моему мнению, нужно развернуть.

Итак, выполните следующие действия:

let y: Int? = 42
let c = String(y!)

Это "!" разворачивает переменную. Надеюсь, это поможет!

Как упоминалось в rakeshbs, убедитесь, что переменная не будет нулевой.

Ответ 7

Вам нужно "развернуть" свой опциональный, чтобы перейти к реальному значению внутри него как описано здесь. Вы разворачиваете опцию с помощью "!". Итак, в вашем примере код будет выглядеть следующим образом:

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

if (x != null) {
    // Successfully converted String to Int
    // Convert x (an optional) to string by unwrapping
    let myNewString = String(x!)
}

Или в этом условном случае вы можете использовать интерполяцию строк:

let myNewString = "\(x!)" // does the same thing as String(x!)

Ответ 8

Для предотвращения небезопасных необязательных разверток я использую его, как показано ниже, как показано в @AntiStrike12,

 if let theString = someVariableThatIsAnInt  {        
    theStringValue = String(theString!))
 }

Ответ 9

Swift 3:

var iString:Int = 100
var strString = String(iString)
extension String {
    init(_ value:Int){/*Brings back String() casting which was removed in swift 3*/
        self.init(describing:value)
    }
}

Это позволяет избежать засорения вашего кода подробным: String(describing:iString)

Бонус: Добавьте похожие методы init для обычно используемых типов, таких как: Bool, CGFloat и т.д.

Ответ 10

Вы можете попробовать это конвертировать Int? нанизывать

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

let newString = "\(x ?? 0)"
print(newString)        // if x is nil then optional value will be "0"

Ответ 11

Надеюсь, это поможет

var a = 50
var str = String(describing: a)