Menu
Coddy logo textTech

Работа с файлами

Часть раздела Объектно-ориентированное программирование путешествия по 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
challenge icon

Задание

Легко

Программа состоит из двух файлов. 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)) }
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Swift