Синтаксис и пунктуация в 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")
Типичные ошибки
- Интерполяция как в Shell — только
\(expr), не$name. CharacterиString— один символ и текст.- Смешение optional — забытый
?или принудительный!даёт runtime crash. - Unicode-кавычки из Word в строковых литералах — лучше вставлять через Xcode.