Перейти к основному содержимому

Синтаксис и пунктуация в Swift

Разработчику Архитектору

Названия знаков по-английски и по-русски: Знаки препинания и символы в IT.

О чём эта статья

Пунктуация Swift: без ; в конце строки, \(имя) в строках, #"raw"#, одинарные кавычки только для Character. Используйте ASCII-кавычки, не "умные" из Word.

Дальше: типы и опционалы.


Общие принципы

Swift — строго типизированный язык с выводом типов. Знаки препинания задают структуру программы; в отличие от C-подобных языков, точка с запятой в конце строки не обязательна. Компилятор относится к "умным" кавычкам из текстовых редакторов как к обычным символам Unicode — в исходнике используйте только ASCII " и '.


Кавычки и строки

Двойные кавычки "

Основной тип String. Поддерживаются многострочные литералы """ ... """ и интерполяция:

let name = "Alice"
let greeting = "Hello, \(name)"
let multiline = """
Line 1
Line 2
"""

Экранирование — \n, \", \u{1F600}.


Одинарные кавычки '

Только для типа Character (один расширенный графемный кластер), не для текста:

let letter: Character = "A"
let heart: Character = "❤️"

Строку в одинарных кавычках написать нельзя — будет ошибка компиляции.


Raw-строки #"..."#

Символ # вокруг кавычек отключает интерполяцию и экранирование — удобно для regex и JSON:

let regex = #"^\d{3}-\d{2}$"#

Точка .

Доступ к свойствам, методам, перечислениям:

let count = "Hello".count
let url = URL(string: "https://example.com")!

Цепочки optional chaining:

let city = person?.address?.city

Запятая ,

Разделяет параметры функций, элементы массива и кортежа, case в switch:

let numbers = [1, 2, 3]
func greet(name: String, age: Int) {}
let person = (name: "Alice", age: 25)

Trailing comma в коллекциях и списках параметров разрешена — удобна при правках в Git:

let fruits = [
"Apple",
"Banana",
]

Точка с запятой ;

Можно писать несколько выражений в одной строке:

let x = 5; let y = 10; print(x + y)

В реальных проектах так не делают: одна строка — одно выражение, читаемость важнее.


Скобки и фигурные скобки

КонструкцияСкобки
if, while, forУсловие в (), тело в {}
ФункцииПараметры в (), тело в {}
Массивы, словари[], [:]
Замыкания{ param in ... }
if count > 0 {
print("positive")
}

Двоеточие :

Типы параметров, типы свойств, case с ассоциированными значениями:

var name: String = "Swift"
func add(a: Int, b: Int) -> Int { a + b }

Подчёркивание _

Игнорирование значения в присваивании, кортежах, замыканиях:

let (_, second) = (1, 2)
_ = expensiveSideEffect()

Внешнее имя параметра можно заменить на _, чтобы не писать метку при вызове:

func greet(_ name: String) { print(name) }
greet("Bob")

Типичные ошибки

  1. Интерполяция как в Shell — только \(expr), не $name.
  2. Character и String — один символ и текст.
  3. Смешение optional — забытый ? или принудительный ! даёт runtime crash.
  4. Unicode-кавычки из Word в строковых литералах — лучше вставлять через Xcode.

Связанные материалы