Это должно быть просто. Но я не нашел предыдущие ответы полезными. Всегда есть какая-то ошибка. Возможно, это потому, что я пробую это в Swift 2.0.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что вопрос связан со старой и неподдерживаемой версией компилятора Swift. Blazej SLEBODA 11.01.2020
В Swift 2.0 toInt() и т. д. были заменены инициализаторами. (В данном случае Int(someString).)
Поскольку не все строки могут быть преобразованы в целые числа, этот инициализатор является отказоустойчивым, что означает, что он возвращает необязательное целое число (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($0)) != nil }).map({ Int(String($0))! })
// fileLines = [1, 2, 3]
Вы можете сократить это с помощью flatMap:
let fileLines = unsolved.characters.flatMap { Int(String($0)) }
flatMap возвращает "Array, содержащий ненулевые результаты сопоставления transform с self"... поэтому, когда Int(String($0)) равно nil, результат отбрасывается.
Ответ 2 · рейтинг 9 · MiladiuM
Это небольшой импровизационный трюк, который я придумал. Поскольку преобразовать Character в Int может быть сложно, но вы можете легко преобразовать String в Int, сделайте следующее:
fileLines = Int(String(i))!
конечно, это не очень хорошо оптимизировано, но для таких случаев, как ваш, это может помочь.
Ответ 3 · рейтинг 3 · Tuan Anh Vu
Фактически. Более простой способ - преобразовать String в Int в Swift 2.o:
let chars = Int(chars)
Не уверен, что это то, для чего вы пытаетесь... Но вы, конечно, можете легко применить это к своему циклу.
Ответ 4 · рейтинг 3 · Declan McKenna
Свифт 4 решения
Чтобы преобразовать Character в String:
let digit = Int(String("1"))!
//Don't force unwrap this if you're not 100% sure your character is a digit