Menu
Coddy logo textTech

Trabajar con archivos

Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 1 de 57.

Los programas reales se dividen en varios archivos. En Swift, todos los archivos .swift de una aplicación se compilan juntos en un único módulo, por lo que una función o un tipo declarado en un archivo puede usarse en cualquier otro archivo sin una importación:

// Greeting.swift
func greeting(for name: String) -> String {
    "Hello, \(name)!"
}

// main.swift
print(greeting(for: "Ada"))

Al ejecutar este programa se imprime Hello, Ada!: main.swift llama a la función que se encuentra en Greeting.swift.

Solo un archivo puede contener sentencias de nivel superior, es decir, código que se ejecuta por sí solo fuera de cualquier función o tipo. Ese archivo es main.swift, y es donde comienza el programa. Los demás archivos contienen únicamente declaraciones:

// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi")      // error: no se permiten sentencias en el nivel superior aquí

// main.swift
let name = readLine() ?? "friend"   // el código de nivel superior está bien en main.swift
print(greeting(for: name))

La organización habitual consiste en un tipo por archivo, con el nombre del tipo: Dog.swift contiene Dog, Account.swift contiene Account. En los desafíos de esta sección, tu código va en esos archivos y main.swift contiene el código de entrada/salida proporcionado, que normalmente no puedes editar. El editor muestra cada archivo como una pestaña.

Dog.swift        // class Dog { ... }
Account.swift    // struct Account { ... }
main.swift       // lee la entrada e imprime los resultados

El control de acceso también se aplica a los archivos. private y fileprivate ocultan una declaración de otros archivos, mientras que el valor predeterminado, internal, la hace visible en todos los archivos del módulo:

// Secret.swift
fileprivate let salt = "x7"          // solo este archivo puede verlo
func hashed(_ s: String) -> String { s + salt }

// main.swift
print(hashed("pw"))                  // bien: hashed es internal
// print(salt)                       // error: salt es fileprivate
challenge icon

Desafío

Fácil

El programa tiene dos archivos. main.swift lee un nombre e imprime el resultado de greeting(for:). Completa greeting(for:) en Greeting.swift para que devuelva Hello, Ada! para el nombre Ada, o Hello, friend! cuando el nombre esté vacío.

Tu código va en Greeting.swift. main.swift contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

// Código de entrada/salida suministrado: mantenlo como está
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Swift