Swift получил версию 1.2

Swift 1.2 и Xcode 6.3 beta

9 февраля был выпущен Swift 1.2 как часть Xcode 6.3 beta. Эта бета-версия включает в себя значительно улучшенный компилятор Swift, а также новые возможности в самом языке Swift. Для полного списка изменений можно прочитать примечания к выпуску. Этот пост будет посвящен основным изменениям.

Улучшения компилятора

Компилятор Swift 1.2 был разработан, чтобы быть более стабильным и повысить производительность во всех отношениях. Эти изменения также включают улучшения при работе со Swift в Xcode. Некоторые из наиболее заметных улучшений включают в себя:

  • Инкрементальные сборки - исходные файлы, которые не изменялись больше не будут повторно компилироваться по умолчанию, что значительно ускорит время сборки для наиболее распространенных случаев. Большие структурные изменения в коде, все же, могут по прежнему привести к пересборке несколько файлов.
  • Быстрые исполняемые файлы - Debug сборки производят бинарные файлы, которые запускаются значительное быстрее, а новые оптимизации дают еще лучшую производительность при Release сборках.
  • Улучшенная диагностика компилятора - более ясные сообщения об ошибках и предупреждения, наряду с новыми подсказками Fix-it, облегчают написание правильного кода на Swift 1.2.
  • Улучшения стабильности - были исправлены самые распространенные "вылеты" компилятора. Теперь вы увидите меньше предупреждений SourceKit в Xcode.

Новые возможности языка

В Swift 1.2, язык был доработан для обеспечения более безопасного и предсказуемого поведения. Apple также продолжала итерации между Swift и Objective-C. Некоторые из наиболее заметных изменений включают в себя:

  • as! для проваливающихся (failable) проверок - проверки, которые могут завершиться неудачей во время выполнения, теперь указываются через оператор as! , чтобы сделать понятным их возможность неудачи для тех, кто будет читать и исправлять ваш код.
  • Возможность пустых значений (nullability) теперь можно выразить в заголовках Objective-C - новые расширения Objective-C в Clang позволяет выразить допустимость пустых указателей и блоков в вашем Objective-C API. Можно указать Objective-C фреймворки, которые отлично работают с Swift кодом. Это облегчает работу со Swift при смешивании с Objective-C кодом.
  • Перечисления в Swift теперь могут быть экспортированы в Objective-C c помощью атрибута @objc - например следующий Swift код:
  1. @objc enum Bear: Int {
  2. case Black, Grizzly, Polar
  3. }

импортируется в Objective-C как:

  1. typedef NS_ENUM(NSInteger, Bear) {
  2. BearBlack, BearGrizzly, BearPolar
  3. };
  • let константы теперь стали более мощными и постоянными - новое правило заключается в том, что let константа должна быть инициализирована перед использованием (подобно var). Она может быть только инициализирована, а не переопределена или изменена после инициализации.

Это позволяет писать такие схемы как:

  1. let x : SomeThing
  2. if condition {
  3. x = foo()
  4. } else {
  5. x = bar()
  6. }
  7. use(x)

Это раньше требовало использования var, даже если никакого изменения не происходило. Свойства также принимают эту модель, для упрощения их семантики в инициализаторах.

  • Более мощное извлечение опционала с if let - Конструкция if let, теперь может извлечь несколько опционалов за раз, а также содержать промежуточные логические условия. Это позволяет вам указывать условные конструкции управления потоком без лишней вложенности.
  • Новая собственная структура данных Set - неупорядоченная коллекция уникальных элементов, которая приходит с NSSet и обеспечивает семантику таких значений, как Array и Dictionary.

Заключение

Apple признательны за ошибки о которых вы сообщили, и многие из наиболее распространенных проблем были исправлены в этой бета-версии. Swift 1.2 является большим шагом вперед как для языка, так и для инструментов. Он включает некоторые бинарно несовместимые изменения, которые требуют обновления кода. Так, Xcode 6.3 включает мигратор, чтобы помочь автоматизировать процесс. Для начала миграции, нажмите на меню Edit, затем выберите Convert > To Swift 1.2 ...