Menu
CoddyTech

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

Часть раздела Объектно-ориентированное программирование путешествия по 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, чтобы она возвращала 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)) }
quiz iconПроверьте себя

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

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

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