Преобразование символов в Int в Swift 2.0
Я просто хочу преобразовать символ в Int .
Это должно быть просто. Но я не нашел полезные ответы. Всегда есть ошибка. Возможно, это потому, что я пытаюсь это сделать в Swift 2.0.
for i in (unsolved.characters) { fileLines += String(i).toInt() print(i) }
- Swift 2 - UnsafeMutablePointer для объекта
- Поймать NSException в Swift
- Swift 2 (executeFetchRequest): обработка ошибок
- Расширять типы массивов, используя предложение where в Swift
- Держите окно всегда сверху?
- Общая функция, использующая имя типа в Swift
- Что означает подчеркивание в этом случае?
- Синтаксис Swift do-try-catch
- Предупреждение об ошибке «C-style for Statement устарел» в Swift 3
- Различия в синтаксисе NSDateComponents?
- Решение «Не удалось вызвать назначенный инициализатор в classе NSManagedObject»
- фатальная ошибка: замена места с самим собой не поддерживается с помощью Swift 2.0
- .toInt () удален в Swift 2?
В Swift 2.0, toInt()
и т. Д. Заменены инициализаторами. (В этом случае Int(someString)
.)
Поскольку не все строки могут быть преобразованы в ints, этот инициализатор невозможен , что означает, что он возвращает необязательный 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
содержащий не-nil результаты transform
отображения над self
» … поэтому, когда Int(String($0))
равен nil
, результат отбрасывается.
Это немного импровизационный трюк, который я придумал. Так как это может быть сложно преобразовать Character
в Int
, но вы можете легко преобразовать String
в Int
:
fileLines = Int(String(i))!
конечно, это не очень хорошо оптимизировано, но для таких случаев, как ваша, это может сделать трюк.
На самом деле. Более простой способ – преобразовать String в Int в Swift 2.o:
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
Решение проблемы OP:
let fileLines = unsolved.compactMap{ Int(String($0) } // fileLines = [1, 2, 3]