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 resultadosEl 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 fileprivateDesafío
FácilEl 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)) }
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
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift