Преобразовать символ в Int в Swift 2.0
Я просто хочу преобразовать персонажа в Int.
Это должно быть просто. Но я не нашел предыдущие ответы полезными. Всегда есть какая-то ошибка. Возможно, это потому, что я пробую это в Swift 2.0.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
4 ответа
В Swift 2.0 toInt()
и т. д. были заменены инициализаторами. (В этом случае, Int(someString)
.)
Поскольку не все строки могут быть преобразованы в целые, этот инициализатор не работает, что означает, что он возвращает необязательный тип 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
возвращает " Array
содержащий ненулевые результаты отображения transform
над self
"… так когда Int(String($0))
является nil
, результат отбрасывается.
Это немного импровизационный трюк, который я придумал. Поскольку это может быть сложно конвертировать Character
в Int
, но вы можете легко конвертировать String
в Int
сделай это:
fileLines = Int(String(i))!
конечно, это не очень хорошо оптимизировано, но для таких случаев, как ваш, это может помочь.
В последних версиях 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")
}
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]
На самом деле. Проще всего конвертировать String в Int в Swift 2.o:
let chars = Int(chars)
Не уверен, что это то, что вы пытаетесь... Но вы можете легко применить это к вашей петле, конечно.