Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 1 из 57.
Реальные программы разделены на несколько файлов. В Swift каждый файл .swift приложения компилируется вместе с остальными в один модуль, поэтому функцию или тип, объявленные в одном файле, можно использовать в любом другом файле без импорта:
// Greeting.swift
func greeting(for name: String) -> String {
"Hello, \(name)!"
}
// main.swift
print(greeting(for: "Ada"))При запуске этой программы выводится Hello, Ada!: main.swift вызывает функцию, расположенную в Greeting.swift.
Только один файл может содержать операторы верхнего уровня — код, который выполняется самостоятельно вне какой-либо функции или типа. Это файл main.swift, и именно с него начинается выполнение программы. В остальных файлах содержатся только объявления:
// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi") // ошибка: операторы не допускаются на верхнем уровне здесь
// main.swift
let name = readLine() ?? "friend" // код верхнего уровня допустим в main.swift
print(greeting(for: name))Обычно в каждом файле находится один тип, названный в соответствии с этим типом: в Dog.swift содержится Dog, а в Account.swift — Account. В заданиях этого раздела ваш код помещается в эти файлы, а в main.swift находится предоставленный код ввода/вывода, который обычно нельзя редактировать. Редактор отображает каждый файл в виде вкладки.
Dog.swift // class Dog { ... }
Account.swift // struct Account { ... }
main.swift // читает ввод и выводит результатыУправление доступом также распространяется на файлы. private и fileprivate скрывают объявление от других файлов, тогда как значение по умолчанию, internal, делает его видимым в каждом файле модуля:
// Secret.swift
fileprivate let salt = "x7" // только этот файл может его видеть
func hashed(_ s: String) -> String { s + salt }
// main.swift
print(hashed("pw")) // нормально: hashed является internal
// print(salt) // ошибка: salt является fileprivateЗадание
ЛегкоПрограмма состоит из двух файлов. main.swift считывает имя и выводит результат greeting(for:). Реализуйте greeting(for:) в Greeting.swift, чтобы для имени Ada она возвращала Hello, Ada!, а если имя пустое — Hello, friend!.
Ваш код должен находиться в Greeting.swift. В main.swift содержится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
// Предоставленный код ввода/вывода: оставьте его как есть
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift