Простые приложения на Swift
Простые приложения на Swift
Swift одинаково пригоден для iOS/macOS и для консольных утилит (swift run). Foundation даёт файлы, JSON (Codable), HTTP (URLSession). Примеры ниже — без SwiftUI; UI — в разделе про async и платформенных главах.
После первой программы и типов.
Как запускать примеры из главы
- Сохраните код в
имя.swift. - Команда:
swift имя.swift(илиswift runв Swift Package). - Проверка:
swift --version(Swift 5.9+).
Генератор паролей
Как запустить
- Файл:
password.swift - Команда:
swift password.swift - Результат: строка пароля в терминале.
import Foundation
func generatePassword(length: Int = 16) -> String {
let chars = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%")
return String((0..<length).map { _ in chars.randomElement()! })
}
print(generatePassword())
Для паролей в продакшене используйте SecRandomCopyBytes из Security framework.
Сортировщик текстового файла
Как запустить
- Файл:
sort.swift - Подготовка:
input.txtиoutput.txt(пути вsortLines). - Команда:
swift sort.swift - Результат: отсортированный файл на диске.
import Foundation
func sortLines(input: URL, output: URL) throws {
let text = try String(contentsOf: input, encoding: .utf8)
let lines = text
.split(whereSeparator: \.isNewline)
.map { String($0).trimmingCharacters(in: .whitespaces) }
.filter { !$0.isEmpty }
.sorted { $0.localizedCompare($1) == .orderedAscending }
try lines.joined(separator: "\n").appending("\n")
.write(to: output, atomically: true, encoding: .utf8)
}
Консольный калькулятор
Как запустить
- Файл:
calc.swift— добавьте вызовыprint(calculate(...))внизу. - Команда:
swift calc.swift - Результат:
Optionalс числом илиnilпри ошибке.
func calculate(_ a: Double, _ b: Double, _ op: Character) -> Double? {
switch op {
case "+": return a + b
case "-": return a - b
case "*": return a * b
case "/": return b == 0 ? nil : a / b
default: return nil
}
}
Optional вместо исключений для «некорректной» операции — типичный стиль Swift.
Трекер задач (Codable)
Как запустить
- Файл:
tasks.swift— вmainвызовитеload/save. - Команда:
swift tasks.swift - Результат: файл
tasks.json.
import Foundation
struct Task: Codable {
var id: UUID
var title: String
var done: Bool
}
struct TaskStore {
let url: URL
func load() -> [Task] {
guard let data = try? Data(contentsOf: url),
let tasks = try? JSONDecoder().decode([Task].self, from: data) else { return [] }
return tasks
}
func save(_ tasks: [Task]) throws {
let data = try JSONEncoder().encode(tasks)
try data.write(to: url)
}
}
HTTP GET через URLSession
Как запустить
- Файл:
fetch.swift - Команда:
swift fetch.swift - Нужно: сеть; скрипт ждёт ответ ~1 с (
RunLoop). - Результат: HTTP-код и начало HTML в консоли.
import Foundation
let url = URL(string: "https://example.com")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error { print(error); return }
if let http = response as? HTTPURLResponse {
print("status:", http.statusCode)
}
if let data = data, let body = String(data: data, encoding: .utf8) {
print(body.prefix(200))
}
}
task.resume()
RunLoop.main.run(until: Date(timeIntervalSinceNow: 1))
Сканер каталога
Как запустить
- Файл:
scan.swift - Команда:
swift scan.swift - Результат: число файлов и суммарный размер.
import Foundation
func scan(directory: URL, extension ext: String) -> (count: Int, bytes: Int64) {
let fm = FileManager.default
guard let enumerator = fm.enumerator(at: directory, includingPropertiesForKeys: [.fileSizeKey]) else {
return (0, 0)
}
var count = 0, bytes: Int64 = 0
for case let fileURL as URL in enumerator {
guard fileURL.pathExtension == ext else { continue }
count += 1
if let size = try? fileURL.resourceValues(forKeys: [.fileSizeKey]).fileSize {
bytes += Int64(size)
}
}
return (count, bytes)
}
Характерный пример для Swift — enum и безопасные значения
Как запустить
- Файл:
parse_port.swift - Команда:
swift parse_port.swift - Результат:
443для валидного порта,ошибкадля0иx.
enum ParseError: Error { case invalidPort }
func parsePort(_ s: String) throws -> UInt16 {
guard let value = UInt16(s), value > 0 else { throw ParseError.invalidPort }
return value
}
for sample in ["443", "0", "x"] {
do { print(try parsePort(sample)) }
catch { print("\(sample): ошибка") }
}
enum с associated values и throws — основа API Apple и серверного Swift (Vapor).
См. также: Codable и данные · async/await · ООП
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Swift - эволюция языка от замены Objective-C до современного инструмента разработки в экосистеме Apple. Экосистема приложений на Swift - инструменты, фреймворки и сценарии разработки в среде Apple. Swift — это современный, безопасный и производительный язык программирования общего назначения, разработанный компанией Apple. Набор советов, правил, принципов и обычаев в разработке на этом языке. Интерфейс класса служит контрактом между разработчиком класса и его пользователями. Он определяет, как взаимодействовать с объектом, не раскрывая механизмов работы. Основы Swift - базовый синтаксис, стандартные фреймворки и старт разработки в экосистеме Apple. Строки и Character, интерполяция, точка и вызов методов, запятая, опциональная точка с запятой, скобки и соглашения Swift для iOS и macOS. Ключевые слова Swift - справочник по основным конструкциям языка и их практическому применению. Набор функций, которые включены в стандартную библиотеку языка. Типизация, набор правил определения типа данных значений языка. Управляющие конструкции и циклы в Swift - условия, итерации и безопасное управление потоком выполнения. Фреймворки Swift-экосистемы - Combine, Apple SDK и сторонние инструменты для построения приложений.История языка Swift
Экосистема приложений на Swift
Что требуется знать перед началом изучения языка программирования Swift
Рекомендации по разработке на Swift
Объектно-ориентированное программирование в Swift
Основы языка Swift
Синтаксис и пунктуация в Swift
Ключевые слова языка Swift
Встроенные функции и методы Swift
Типы данных и объявление переменных
Управляющие конструкции и циклы в Swift
Фреймворки Apple и сторонние решения