Trabalhando com Arquivos
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 1 de 57.
Programas reais são divididos em vários arquivos. No Swift, cada arquivo .swift de um aplicativo é compilado junto em um único módulo, portanto uma função ou tipo declarado em um arquivo pode ser usado em qualquer outro arquivo sem uma importação:
// Greeting.swift
func greeting(for name: String) -> String {
"Hello, \(name)!"
}
// main.swift
print(greeting(for: "Ada"))Executar este programa imprime Hello, Ada!: main.swift chama a função que está em Greeting.swift.
Apenas um arquivo pode conter instruções de nível superior, ou seja, código que é executado por conta própria, fora de qualquer função ou tipo. Esse arquivo é main.swift, e é nele que o programa começa. Os outros arquivos contêm apenas declarações:
// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi") // erro: instruções não são permitidas no nível superior aqui
// main.swift
let name = readLine() ?? "friend" // código de nível superior é permitido em main.swift
print(greeting(for: name))O layout usual é um tipo por arquivo, nomeado de acordo com o tipo: Dog.swift contém Dog, Account.swift contém Account. Nos desafios desta seção, seu código vai nesses arquivos e main.swift contém o código de entrada/saída fornecido, que geralmente você não pode editar. O editor mostra cada arquivo como uma aba.
Dog.swift // class Dog { ... }
Account.swift // struct Account { ... }
main.swift // lê a entrada e imprime os resultadosO controle de acesso também se aplica aos arquivos. private e fileprivate ocultam uma declaração de outros arquivos, enquanto o padrão, internal, a torna visível em todos os arquivos do módulo:
// Secret.swift
fileprivate let salt = "x7" // somente este arquivo pode vê-lo
func hashed(_ s: String) -> String { s + salt }
// main.swift
print(hashed("pw")) // ok: hashed é internal
// print(salt) // erro: salt é fileprivateDesafio
FácilO programa tem dois arquivos. main.swift lê um nome e imprime o resultado de greeting(for:). Complete greeting(for:) em Greeting.swift para que ele retorne Hello, Ada! para o nome Ada, ou Hello, friend! quando o nome estiver vazio.
Seu código deve ser colocado em Greeting.swift. main.swift contém o código de entrada/saída fornecido e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift