🕊️ Swift

Типы, опционалы, циклы, функции, async/await, коллекции и фреймворки Apple.

Шпаргалки · Программирование · #swift #ios #apple

IDE и запуск

Xcode (macOS), VS Code (серверный Swift). swift run, swift build, Swift Package Manager (Package.swift). Онлайн: Swift Playgrounds.

Типы данных

let n: Int = 1        // let константа, var переменная
var s: String = "a"; let d: Double = 1.5; let b = true
var opt: Int? = nil   // опционал
let t = (1, "a"); var arr = [1, 2]; var dict = ["a": 1]
struct User { var id: Int; var name: String }
enum Role { case admin, user }

Операторы

+ - * / %, == != < >, && || !, ?? (по умолчанию для опционала), ?., ! (принудительно развернуть), ... / ..< (диапазоны).

Циклы

for i in 0..<3 {}
for (i, x) in arr.enumerated() {}
while cond {}
repeat {} while cond

Функции

func add(_ a: Int, to b: Int = 0) -> Int { a + b }
let sq = { (x: Int) in x * x }
if let v = opt { print(v) }
guard let v = opt else { return }

Встроенные

print, min, max, abs, zip, .count, .isEmpty, .sorted(), .map, .filter, .reduce, Int("5").

Асинхронность

func load() async throws -> String { try await Task.sleep(for: .seconds(1)); return "ok" }
async let a = load(); async let b = load()
let r = try await (a, b)
actor Counter { var n = 0 }     // безопасное состояние

Коллекции

arr.map { $0 * 2 }.filter { $0 > 2 }
dict["b", default: 0] += 1
let s: Set<Int> = [1, 2]

Фреймворки по задачам

SwiftUI, UIKit (интерфейс), Combine (потоки), Core Data, SwiftData (БД), URLSession (сеть), XCTest, Swift Testing (тесты), Vapor (сервер).