Преобразование символов в Int в Swift 2.0
Я просто хочу преобразовать символ в Int.
Это должно быть просто. Но я не нашел полезные ответы. Всегда есть ошибка. Возможно, это потому, что я пытаюсь это сделать в Swift 2.0.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
Ответы
Ответ 1
В Swift 2.0, toInt()
и т.д. были заменены инициализаторы. (В этом случае Int(someString)
.)
Поскольку не все строки могут быть преобразованы в int, этот инициализатор не работает, что означает, что он возвращает необязательный 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($0)) != nil }).map({ Int(String($0))! })
// fileLines = [1, 2, 3]
Вы можете сократить это еще на flatMap
:
let fileLines = unsolved.characters.flatMap { Int(String($0)) }
flatMap
возвращает "a Array
, содержащий не-nil результаты отображения transform
над self
"... поэтому, когда Int(String($0))
является nil
, результат отбрасывается.
Ответ 2
Это немного импровизационный трюк, с которым я столкнулся. Так как сложно преобразовать Character
в Int
, но вы можете легко преобразовать String
в Int
сделайте следующее:
fileLines = Int(String(i))!
Конечно, это не очень хорошо оптимизировано, но для таких случаев, как ваш, он может сделать трюк.
Ответ 3
На самом деле. Более простой способ - преобразовать String в Int в Swift 2.o:
let chars = Int(chars)
Не уверен, что это то, что вы пытаетесь... Но вы можете легко применить это к своему циклу, конечно.
Ответ 4
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
Решение проблемы ОП:
let fileLines = unsolved.compactMap{ Int(String($0) }
// fileLines = [1, 2, 3]
Ответ 5
В последних версиях Swift (по крайней мере, в Swift 5) вам не нужно делать дополнительное преобразование в String
.
Character
есть свойство wholeNumberValue
которое пытается преобразовать символ в Int
и возвращает nil
если символ не представляет и целое число.
let char: Character = "5"
if let intValue = char.wholeNumberValue {
print("Value is \(intValue)")
} else {
print("Not an integer")
}