Эта книга описывает Swift 4.2, дефолтную версию, которая по умолчанию поддерживается Xcode 10.0. Вы можете использовать Xcode 10.0 для сборки таргетов, которые написаны как на Swift 4, так и на Swift 3.
Заметка
Когда компилятор Swift 4.2 работает с кодом на Swift 3, он определяет версию языка как Swift 3.4. В качестве результата вы можете использовать условные завершающие блоки, например, #if swift(>=3.4), чтобы написать код, который совместим с несколькими версиями компилятора Swift.
Когда вы используете Xcode 9.2 для сборки кода на Swift 3, большая часть функционала Swift 4 так же будет вам доступна. Тем не менее есть функционал, который доступен только на Swift 4:
- Операции с подстроками возвращают экземпляр типа Substring вместо String.
- Атрибут @objc явно добавляется в нескольких местах.
- Расширения типа в том же файле получают доступ и к приватным членам тоже.
Таргет написанный на Swift 4 может зависеть от таргета, который написан на Swift 3 и наоборот. Если у вас есть большой проект, который разделен на несколько фреймворков, то вы можете осуществить миграцию своего кода со Swift 3 на Swift 4 по одному фреймворку за раз.