В 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, результат отбрасывается.
person
Aaron Brager
schedule
11.06.2015