Статьи

Что нового в Swift 3?

В сентябре этого года Apple официально выпустила последнюю версию своего нового языка программирования Swift 3. Как и Swift 2 в прошлом году, эта версия содержит множество новых функций и улучшений, которые делают программирование с помощью Swift еще лучше!

Swift 3 входит в состав Xcode начиная с версии 8.0, а также может быть загружен с веб-сайта swift.org .

Если вы хотите использовать Swift 3 в своих текущих или будущих проектах, Xcode предоставляет отличный инструмент миграции, который позволит вам легко это сделать.

Для новых проектов Swift, созданных с Xcode 8, Swift 3 будет использоваться автоматически. При первом открытии проекта Swift 1 или 2 в Xcode 8 вы будете предупреждены о необходимости преобразования вашего кода в код Swift 3 или Swift 2.3.

Выбор Swift 2.3 предоставит вам доступ ко всем новым API iOS 10, macOS Sierra, tvOS 10 и watchOS 3, но все равно будет использовать синтаксис Swift 2. Кроме того, вы можете не преобразовывать свой код сразу и продолжать использовать старую версию Swift. Когда вы будете готовы, вы можете перейти к Edit> Convert> To Current Swift Syntax … в строке меню Xcode, чтобы преобразовать весь ваш код.

Инструмент миграции заботится обо всех изменениях, которые необходимо внести в ваш код для принятия Swift 3 из Swift 2. Это включает изменение имен методов и свойств, изменение синтаксиса, где это необходимо, и множество других вещей. Перед завершением преобразования Xcode покажет вам ожидающие изменения для каждого из ваших файлов кода Swift. Это означает, что вы можете проверить все изменения до того, как они будут внесены, просто чтобы убедиться, что инструмент миграции не вносит ошибок в ваш проект.

Основной частью релиза Swift 3 была новая библиотека Foundation с открытым исходным кодом. Хотя опытные разработчики MacOS и iOS знакомы с платформой Foundation, эта библиотека предоставляет несколько новых возможностей для программистов Swift.

Первое немедленное изменение, которое вы заметите при использовании новых API-интерфейсов Foundation, — отсутствие префикса NS . Это означает, что такие классы, как NSDate , NSTimer и NSURL , теперь представляют собой просто Date , Timer и URL в коде Swift. Инструмент переноса кода в Xcode 8 автоматически переименует все эти классы для вас, но это изменение, о котором должны знать все разработчики Swift при написании нового кода.

Далее, будучи базовой библиотекой Swift, все API-интерфейсы Foundation теперь совместимы с операционными системами на основе Linux. Как Swift сделан совместимым с другими платформами, так и библиотека Foundation. Это означает, что базовый набор функций, предоставляемых Foundation, таких как управление датой / временем и работа в сети, может использоваться везде, где может использоваться Swift. Эта межплатформенная совместимость была одной из основных причин удаления префикса NS из API-интерфейсов Foundation.

Наконец, многие из API-интерфейсов Foundation были переработаны для лучшего соответствия с кодом Swift. Например, в зависимости от API, этот редизайн означает, что Foundation теперь может использовать гораздо больше преимуществ:

  • Улучшенная обработка ошибок с использованием блоков try и catch , представленных в Swift 2.
  • Необязательные типы, в отличие от всех неявно развернутых необязательных типов, которые были созданы при импорте основы Objective C в Swift.
  • Более современные и оптимизированные алгоритмы.
  • Повышение общей производительности благодаря написанию на чистом Swift, который сам по себе высоко оптимизирован.

В целом, использование новой библиотеки Swift Foundation — намного лучший опыт по сравнению с использованием старой платформы Foundation в вашем собственном коде Swift. Если вы хотите узнать больше о библиотеке Swift Foundation с открытым исходным кодом, вы можете проверить это на GitHub .

Swift 3 также представляет некоторые новые рекомендации по разработке API. Они были созданы с целью упростить все API Swift, а также сделать их согласованными.

Первое изменение в Swift 3 для улучшения API — это удаление ненужных слов из объявлений методов и свойств. Это изменение действует как языковая функция при импорте API Objective C, а также влияет на рекомендации для разработчиков, пишущих свой собственный код Swift. Следующий код содержит несколько примеров кода Swift 2 по сравнению с функционально идентичным кодом Swift 3.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
let color = UIColor.redColor() // Swift 2
let color = UIColor.red // Swift 3
 
«Hello World!».capitalizedString // Swift 2
«Hello World!».capitalized // Swift 3
 
// Swift 2
if someString.containsString(«a») {
     
}
 
// Swift 3
if someString.contains(«a») {
     
}

Вы увидите, что версии Swift 3 более читабельны. В частности, операторы if имеют лучший поток и выглядят больше как английское предложение.

Swift 3 фактически отменяет одно из изменений, внесенных в Swift 2: маркировку первого параметра в функции. В Swift 2 метка первого параметра автоматически игнорировалась при вызове функции. Например, функция, объявленная как:

1
func addObject(object: AnyObject)

будет вызван в Swift 2 следующим образом:

1
addObject(someObject)

Swift 3 отменяет это изменение и больше не игнорирует метку первого параметра автоматически. Это означает, что указанная выше функция будет вызываться со следующим:

1
addObject(object: someObject)

Использование этой функции, однако, теперь идет вразрез с пропущенными ненужными словами цели Swift 3. Чтобы следовать новым рекомендациям по проектированию Swift API, объявление функции должно быть изменено на:

1
func add(object: AnyObject)

Это новое объявление будет затем использоваться со следующим кодом:

1
add(object: someObject)

Этот новый формат именования функций работает так же, как и формат Swift 2, но имеет дополнительное преимущество, заключающееся в предоставлении метки, которая четко связана с первым параметром функции.

Обратите внимание, что вы по-прежнему можете указать, что первый метка параметра вашей функции Swift 3 должна игнорироваться. Это достигается с помощью _ и затем имени параметра для использования в определении функции, например:

1
2
3
4
5
6
7
// Definition
func add(_ object: AnyObject) {
    // Access parameter through `object` variables
}
 
// Usage
add(someObject)

Хотя это был очень простой пример, этот новый формат объявления функций становится чрезвычайно полезным с более сложными именами. Например, следующий код показывает, как некоторые методы Swift String теперь изменились с Swift 2 на Swift 3.

1
2
3
4
5
let replaced = someString.stringByReplacingOccurencesOfString(«a», withString: «A») // Swift 2
let replaced = someString.replacingOccurences(of: «a», with: «A») // Swift 3
 
let array = listString.componentsSeparatedByString(«,») // Swift 2
let array = listString.components(separatedBy: «,») // Swift 3

Это изменение направлено на обеспечение согласованности всех свойств в Swift 3, а также перечислений. Было решено, что, поскольку значения перечисления ближе к свойствам, чем к классам, они должны следовать одному и тому же формату именования.

Это относительно незначительное изменение, о котором инструмент миграции Xcode позаботится полностью при преобразовании кода Swift 2. Это то, о чем должны знать все разработчики при написании нового кода.

Ниже приведены некоторые примеры того, как это изменение влияет на конкретные API.

1
2
3
4
5
let color = UIColor.redColor().CGColor // Swift 2
let color = UIColor.red.cgColor // Swift 3
 
let alignment = NSTextAlignment.Center // Swift 2
let alignment = NSTextAlignment.center // Swift 3

Помимо Swift 3, была также выпущена версия Swift с открытым исходным кодом базовой библиотеки Grand Central Dispatch (GCD). GCD — это инфраструктура Apple для обеспечения одновременного выполнения кода в многоядерных системах. Основными целями переписывания этой библиотеки являются:

  • Предоставляют те же функциональные возможности, что и существующие функции GCD на основе C, с API-интерфейсами, предназначенными для работы и чтения наряду с другим кодом Swift.
  • Предоставьте набор кроссплатформенных API, которые, подобно базовой библиотеке Foundation, можно будет использовать везде, где Swift совместим.

Для разработчиков, имеющих опыт работы с GCD API на платформах Apple, эта новая версия Swift будет легко понять. Это следует тем же понятиям. Следующий код показывает, как некоторые распространенные задачи GCD теперь можно выполнять с помощью кода Swift 3:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
// Doing work on a background thread
let queue = DispatchQueue(label: «threadName»)
queue.async {
    // Execute work
}
 
// Doing work on the main thread
DispatchQueue.main.async {
    // Execute work
}
 
// Doing work with a specified `Quality of Service`
let quality = DispatchQoS.background
queue.async(qos: quality) {
    // Execute work
}
 
// Doing work after an amount of time
let delay = DispatchTime.now() + .seconds(10)
DispatchQueue.main.after(when: delay) {
    // Execute work
}

Если вы хотите узнать больше о параллельном программировании и GCD в Swift 3, вы можете проверить сессию Apple WWDC этого года и Swift-версию справочного руководства Dispatch Framework .

Хотя это не совсем новая функция или изменение, Swift 3 является первым выпуском, так как в декабре 2015 года Apple с открытым исходным кодом выбрала язык программирования. Благодаря тому, что полностью открытый исходный код дает много преимуществ, это станет еще более очевидным в будущих версиях Swift.

Во-первых, создание Swift и его основных библиотек с полностью открытым исходным кодом означает, что разработчики могут портировать Swift для работы на других платформах и операционных системах. В настоящее время Swift совместим со всеми платформами Apple в дополнение к современным версиям Ubuntu. Однако со временем Swift может быть перенесен на другие операционные системы, включая Android и Windows. Это может сделать Swift действительно кроссплатформенным языком и больше использоваться разработчиками не Apple.

Затем, когда все внутренние функции Swift видны широкой публике, это означает, что сотрудники, не принадлежащие Apple, могут внести свой вклад в язык. В дополнение к новым функциям, опытные разработчики также могут внести свой вклад в исправление ошибок, улучшения и оптимизацию в Swift.

В целом, создание Swift с открытым исходным кодом принесет улучшения и функции в язык в более короткие сроки, поскольку это позволит большему количеству людей внести свой вклад в него. Если вы хотите узнать больше о природе Swift с открытым исходным кодом, вы можете проверить следующую статью:

  • Swift с открытым исходным кодом

Я показал вам некоторые из наиболее важных изменений, которые произошли с языком Swift в версии 3. Это важный выпуск, потому что, помимо всех новых функций и API-интерфейсов базовой библиотеки, он дает четкое представление о том, как будет развиваться Swift. в будущие годы. Если изменения в Swift 3 являются какими-либо указаниями, язык будет становиться все более и более приятным для разработчиков.

Как всегда, пожалуйста, не забудьте оставить свой отзыв и комментарии в разделе комментариев ниже. И ознакомьтесь с некоторыми другими нашими курсами и руководствами по языку Swift!

  • стриж
    Создание приложений для iOS с Swift 3
    Маркус Мюльбергер
  • стриж
    Создайте приложение для iOS с Swift 3: переменные, константы и дополнительные
    Маркус Мюльбергер
  • стриж
    Начало работы Создание приложения Apple TV с помощью Swift
    Дерек Дженсен
  • стриж
    Как использовать Swift в Linux
    Дерек Дженсен