Преобразование символа в Int в Swift 2.0
Я просто хочу, чтобы преобразовать символ на Int.
Это должно быть просто. Но я не нашел предыдущие ответы полезными. Всегда есть какая-то ошибка. Возможно, это потому, что я пытаюсь это сделать в Swift 2.0.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
4 ответов
В Swift 2.0, toInt()
, etc., были заменены инициализаторами. (В данном случае Int(someString)
.)
поскольку не все строки могут быть преобразованы в ints, этот инициализатор failable, что означает, что она возвращает необязательный int (Int?
), а не просто Int
. Лучшее, что нужно сделать, это развернуть это необязательное использование if let
.
я не уверен, что именно вы собираетесь, но этот код работает в Swift 2 и выполняет то, что Я думаю, вы пытаетесь сделать:
let unsolved = "123abc"
var fileLines = [Int]()
for i in unsolved.characters {
let someString = String(i)
if let someInt = Int(someString) {
fileLines += [someInt]
}
print(i)
}
или, для Swiftier решение:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String()) != nil }).map({ Int(String())! })
// fileLines = [1, 2, 3]
вы можете сократить больше с flatMap
:
let fileLines = unsolved.characters.flatMap { Int(String()) }
flatMap
возвращает " an Array
содержащий ненулевые результаты отображения transform
над self
"... Итак, когда Int(String(
Это немного импровизационный трюк, который я придумал. Так как это может быть сложно преобразовать Character
to Int
, но вы можете легко преобразовать String
to Int
этого :
fileLines = Int(String(i))!
конечно, это не очень хорошо оптимизирована, но для таких случаев, как ваш, это может сделать трюк.
на самом деле. Более простой способ-преобразовать строку в Int в Swift 2.o is:
let chars = Int(chars)
Не уверен, что это то, что вы пытаетесь...Но вы можете легко применить это к вашему циклу, конечно.
Swift 4 решения
преобразование Character
до String
:
let digit = Int(String("1"))!
//Don't force unwrap this if you're not 100% sure your character is a digit
решение проблемы OPs:
let fileLines = unsolved.compactMap{ Int(String() }
// fileLines = [1, 2, 3]