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)