Padrões de Projeto em Swift com exemplos de código para iOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
```html

Padrões de Projeto em Swift: Guia Prático para Desenvolvedores iOS/macOS



Padrões de projeto (design patterns) são soluções comprovadas para problemas típicos no desenvolvimento de software. Para desenvolvedores iOS/macOS, conhecer os padrões em Swift é uma habilidade obrigatória, permitindo criar aplicações escaláveis, testáveis e de fácil manutenção. Neste artigo, vamos analisar 4 padrões-chave com exemplos reais de código.



1. Singleton

Um dos padrões mais populares no desenvolvimento iOS. Garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a ela. Usado para gerenciar recursos compartilhados: UserDefaults, NetworkManager, Database.



Implementação Singleton em Swift

class NetworkManager {    static let shared = NetworkManager()        private init() { }        func fetchData(from url: URL) {        // lógica da requisição        print("Dados recebidos de \\(url)")    }}

// UsoNetworkManager.shared.fetchData(from: URL(string: "https://api.example.com")!)


Importante: No Swift 5.5+, use actor para segurança de threads:



actor SettingsManager {    static let shared = SettingsManager()    private var settings: [String: String] = [:]        func setValue(_ value: String, forKey key: String) {        settings[key] = value    }        func getValue(forKey key: String) -> String? {        return settings[key]    }}


2. Factory Method

Define uma interface para criar objetos, mas permite que subclasses alterem o tipo dos objetos criados. Ideal para criar diferentes tipos de componentes de UI ou modelos de dados.



Exemplo: criação de botões para diferentes plataformas

protocol Button {    func render()}

class iOSButton: Button { func render() { print("Renderizando botão iOS com cantos arredondados") }}

class macOSButton: Button { func render() { print("Renderizando botão macOS com gradiente") }}

protocol ButtonFactory { func createButton() -> Button}

class iOSButtonFactory: ButtonFactory { func createButton() -> Button { return iOSButton() }}

class macOSButtonFactory: ButtonFactory { func createButton() -> Button { return macOSButton() }}

// Usolet factory: ButtonFactory = iOSButtonFactory()let button = factory.createButton()button.render() // "Renderizando botão iOS com cantos arredondados"


3. Observer

Permite que objetos se inscrevam em eventos e recebam notificações sobre mudanças. Em Swift, é implementado através de NotificationCenter, Combine ou didSet.



Implementação via Combine (iOS 13+)

import Combine

class WeatherStation { @Published var temperature: Double = 0.0 func updateTemperature(_ temp: Double) { temperature = temp }}

class WeatherDisplay { var subscriptions = Set<AnyCancellable>() let station = WeatherStation() func startObserving() { station.$temperature .sink { [weak self] newTemp in print("Temperatura alterada: \\(newTemp)°C") self?.updateUI(with: newTemp) } .store(in: &subscriptions) } private func updateUI(with temp: Double) { // Atualização da interface }}


Implementação clássica via protocolo

protocol Observer: AnyObject {    func update(value: Int)}

class Subject { private var observers = [Observer]() func attach(_ observer: Observer) { observers.append(observer) } func detach(_ observer: Observer) { observers.removeAll { $0 === obs ```

Blogs

Book Recommendations