Язык Swift, преемник Objective-C
Для замены Objective-C Apple разработала новый язык, который хочет использовать достижения в области языков, а также производить более быстрые приложения.
На язык, по мнению авторов, влияли C #, Objective-C, Haskell среди прочего (см. описание синтаксиса ниже). Возможно, с помощью ретроскопа. Однако он основан на инструментах LLVM и производит родной код. Значит, очень старый синтаксис с современным бэкендом.

Сравнение с языком Go, естественно, приходит в голову, так как Swift хочет стать преемником Objective-C, в то время как Go хотел сделать то же самое с C++. Swift содержит несколько синтаксических элементов Go:
- Условие if без скобок с креплением справа, вдохновленное Go.
- Аналогично для петли для.
- fallthrough в конструкциях switch, что противоположно разрыву в C, здесь тоже происходит от Go.
- Слово func для определения функции.
- Слово print отображает сообщение из версии 2. В версии 1 это было println, как в Go.
- Точка с запятой (необязательно). Это также относится к JavaScript .
- Никаких исключений .
Однако он отличается от Go по многим важным вопросам, включая использование наследства, когда Go использует композицию. Конкуренция - это библиотека для Swift, генеричности не хватает Go. Go - минималистичный язык (один синтаксис петли), в то время как Swift стремится интегрировать все возможные элементы в каждый аспект языка.
Изначально Свифт был владельцем, но 3 декабря 2015 года Apple опубликовала исходный код (компилятор + библиотека). Для создания программы требуется XCode. Он с самого начала представлен с расширенной документацией, полным учебником и проигрывателем типа TypeScript для тестирования кода. Фактически его проектирование началось в 2010 году, на подготовку к его публичному распространению ушло четыре года.
Особенности языка...
- Скомпилирован с Clang для создания двоичного кода.
- Совместимость с библиотеками Objective-C и C с помощью «bridging header», промежуточных интерфейсов (но не с Objective-C + + ).
- Без макросов.
- Без корутинов и конкуренции вообще. Это можно сделать с помощью расширения типа GCD.
- Классы проходят по ссылке, а структуры - по значению.
- Примитивы, аналогичные Юля или аннотации JS: Int32, UInt, UInt8, String, Float, Double, Bool и т. Д.
Int эквивалентен Int32 или Int64 в зависимости от ОС. - Нил равно пустому.
- Память управляется автоматически путем подсчета ссылок, поэтому без коллекторского гаража.
Описание синтаксиса
Показать мир привет!
print("Salut le Monde!")
Можно вставить переменные с оператором\(), который, напротив, $ от PHP имеет преимущество в разделении конца имени переменной.
Тип, определенный по выводу
Как в Go, Julia и многих сценаристских языках.
var x = 10
Назначенное целое значение дает x тип int. Тип не может измениться, как это было бы с динамическим языком.
Явный тип
Это стало обычным явлением, переменные определяются по var и тип может быть указан как вариант, но переменные не динамичны, как в Julia.
var s = "hello" : string
Константа
Константы определяются по let. Не видно преимущества перед const и слова let перед другой ролью в других языках, таких как JavaScript или в BASIC, который изначально использовал это слово для назначения в целом.
let x = 10
Кортеж
Кортеж может автоматически разлагаться и, таким образом, обеспечивать множественную отдачу от разрушенных функций или назначений.
let tuple1 = (1000, "hello")
let (x, y) = tuple1
x принимает значение 1000, а y - значение «hello».
Структура контроля if
Повторяет принцип Go: не скобки, а обязательные скобки:
if x == 10 {
print("égal à 10")
} else if x < 10 {
print("moins que 10")
} else {
print("plus de 10")
}
Петля для
«На один интервал» выглядит как у Руби и Скриптола. Swift использует.. <для эксклюзивного интервала,... для инклюзивного интервала. Руби использует... для эксклюзивного интервала.
Двойные точки используются в типографии для представления интервала, который также был взят Bash, в то время как три точки подвески представляют собой неопределенное продолжение.
Питон со своей стороны повторяет символизм АЛГОЛ 68.
for var i in 1 ... 10 {
print(i)
}
Для выбора приращения также был реализован формат C. Скорее можно было бы добавить такой вариант шага, как в BASIC. Он был удален в Swift 3.
For in работает на коллекции, которая сейчас реализована во всех языках, даже C++.
for x in liste {
print("Item \(x)")
}
Классический пример для отображения букв строки так же прост в Swift, как и в Python.
for c in "demo" {
print(c)
}
Для получения пар ключ-значение в словаре используется кортеж.
let liste = [ "a" : "apple", "b" : "orange", "c" : "fraise" ]
for (k , v) in liste {
print("\(k) = \(v))
}
While и репетиция while: Ретро-мода языка BASIC
Почему-то петля до... while версии 1, унаследованной от C (1972), заменяется повторением... while, напоминающий until-репетицию языка BASIC (1964).
while x < y {
}
repeat {
} while x < y
Коммутатор
Он решает вопрос о множественных случаях, разделяя их запятыми. Как и Go, он также может использовать слово fallthrough для цепей предложений. Интервалы возможны, как в Script.
Можно также использовать кортежи в коробках, но сравнить их с первоначальным кортежем.
switch x {
case 1:
print("1")
case 2, 3, 4:
print("entre 2 et 4")
case 5 ... 10:
print("entre 5 et 10")
default :
print("autre valeur")
}
Предложения break и continue, связанные с меткой в коммутаторе, вставленном в цикл while, позволяют либо перейти к инструкции, либо перейти к следующей итерации.
Совпадение шаблона
Флажки в структуре switch могут содержать условия с предложением where. Принцип восходит к языку SNOBOL (1962). В Python было добавлено расширение matching pattern, названное SnoPy.
switch x {
case y where y < 10
case z where x + z = 20
}
Функция
Синтаксис перевернут по сравнению с C, как это модно с новыми языками. Она поддерживает несколько возвращений, настройки по умолчанию. Можно вложить функции в другую функцию, которые недоступны из нее.
func mafonction(s : String) -> String {
s += "suffixe"
return s
}
Множественные возвращения в виде кортежа. Имя переменной должно быть указано как в заголовке, так и в инструкции возврата.
func pair(x : Int, y : Int) -> (a : Int, b : Int) {
a = x * 2
b = y + 5
return(a, b)
}
Вариадические параметры с символом трех точек, вдохновленные C, символизмом, который актуален здесь.
func listing(x : Int ...) -> Int {
var a, b, c
(a, b, c) = x
}
listing(5, 10, 20)
Аргумент x на самом деле является таблицей, но это не видно при вызове функции.
Классы и наследование
Классы с простым наследованием и несколькими интерфейсами, например Java, C #. Конструктор называется init, а не constructor или, скорее, повторяет название, чем класс, возможно, потому, что он более общий.
class Vehicle {
var speed : Int
var name : String
init(s) {
speed = s
}
func getname() {
return name
}
}
class Car : Vehicle {
var passengers : Int
}
Протокол
Интерфейс называется протоколом, чтобы быть оригинальным. Они могут быть типичными или родовыми. Принцип вдохновлен C # с геттерами и сеттерами: слова get и set уточняют, можно ли читать или присваивать свойство .
protocol moninterface {
var i: Int { get set }
var name: String { get }
}
Интерфейс (протокол) наследуется как класс:
class car : moninterface {
var name : String = "hello"
}
Расширения
Черты здесь называются расширениями. Это позволяет добавлять методы к существующим классам. Здесь видно влияние Руста: смена названия привычных элементов на языки дает им вид новизны!
extension tentimes {
var up : Int { return self * 10 }
}
var ten : Int = 10
print(ten.tentimes)
Кто будет использовать Swift?
Принятие Swift не должно вызывать проблем у разработчиков мобильных устройств Apple. Они уже используют на платформе особый язык, Objective C, и мигрировать на более современную и совместимую версию может только упростить им жизнь.
Возможное производство биткода LLVM, может дать доступ к Android только в том случае, если приложение не использует фреймворк Apple и XCode больше не нужен. Такое же ограничение действует и для других операционных систем.
Авторы также разрабатывают язык для использования со стороны сервера, и для этого существует несколько фреймворков. Полезные компоненты реализуются в проекте Open Swift. Но в 2017 году Swift не готов к вневедомственному использованию и поскольку каждая новая версия добавляет несовместимости с предыдущей, лучше не использовать ее, пока она не станет полностью стабильной. Тем более что его документация тоже не актуальна. Кроме того, он серьезно пригоден только для XCode, поэтому только для Apple.
Сайт: