Работа с файлами
Часть раздела Объектно-ориентированное программирование путешествия по 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, чтобы она возвращала Hello, Ada! для имени 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