Преобразование символов в Int в Swift 2.0

Я просто хочу преобразовать символ в Int .

Это должно быть просто. Но я не нашел полезные ответы. Всегда есть ошибка. Возможно, это потому, что я пытаюсь это сделать в Swift 2.0.

for i in (unsolved.characters) { fileLines += String(i).toInt() print(i) } 

В 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] 
  • Переопределение методов в расширениях Swift
  • Предупреждение об ошибке «C-style for Statement устарел» в Swift 3
  • Swift 2 - UnsafeMutablePointer для объекта
  • Удалить текст с кнопки «Назад», удерживая значок
  • Синтаксис Swift do-try-catch
  • Операторы «++» и «-» устарели Xcode 7.3
  • фатальная ошибка: замена места с самим собой не поддерживается с помощью Swift 2.0
  • Можно ли реплицировать автоматическое числовое преобразование Swifts в Foundation (NSNumber) для типов (U) Int8 / 16/32/64?
  • Решение «Не удалось вызвать назначенный инициализатор в classе NSManagedObject»
  • Различия в синтаксисе NSDateComponents?
  • Interesting Posts

    Почему я неожиданно получаю сообщение «Заблокированная загрузка смешанного активного контента» в Firefox?

    WebMatrix / IIS Express работает только с Opera!

    В форме Django, как сделать поле readonly (или отключено), чтобы он не редактировался?

    UIScrollView не прокручивается после обновления до iOS7 / xcode 5

    Форма шестигранника с CSS3

    Строковое представление Enum

    Предотrotation кэширования в ASP.NET MVC для определенных действий с использованием атрибута

    Прослушивание ACTION_SCREEN_OFF

    Не удалось загрузить тип «AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider».

    Создание C-программы «из исходного дерева» с помощью GNU make

    HTML внутри XML. Должен ли я использовать CDATA или кодировать HTML

    Как определить, находится ли точка в правой или левой части строки

    Автоматическая сортировка музыкальных файлов в папках по именам альбомов / исполнителей

    Ограничение ввода JTextField для целых чисел

    Отправка клавиши F1 – F12 с внешней клавиатурой с отсутствующими клавишами на iPad Pro с использованием программного обеспечения эмуляции SSH

    Давайте будем гением компьютера.