← Back to list

KVO e KVC no Desenvolvimento iOS com Swift

No desenvolvimento de aplicativos iOS, dois conceitos fundamentais para o gerenciamento de dados e a comunicação entre componentes são o…

Lidiane Gomes Barbosa · 2024-05-22 14:27 · 3 claps · 3.2 min read
#swift #reactive-programming #ios-development #paradigmas-de-programação #swift-programming
Open on Medium ↗
Wiki topics: STP · Startups & Venture 💻 · Programming 🌐 · Web Development 📱 · Mobile Development

KVO e KVC no Desenvolvimento iOS com Swift

No desenvolvimento de aplicativos iOS, dois conceitos fundamentais para o gerenciamento de dados e a comunicação entre componentes são o KVO (Key-Value Observing) e o KVC (Key-Value Coding). Ambos são poderosas funcionalidades que permitem a observação e manipulação de propriedades de objetos de maneira dinâmica. Neste artigo, exploraremos o que são KVO e KVC, e como aplicá-los em Swift para desenvolver aplicativos eficientes e reativos.

Key-Value Coding (KVC)

Key-Value Coding (KVC) é um mecanismo que permite acessar e modificar propriedades de objetos de forma indireta usando strings. Isso significa que, ao invés de acessar uma propriedade diretamente pelo seu nome, você pode usar uma string para representá-la.

Benefícios do KVC

  • Flexibilidade: Permite acessar e modificar propriedades de maneira dinâmica, útil para cenários como serialização e desserialização de dados.

  • Redução de Código: Facilita operações que, de outra forma, exigiriam a escrita repetitiva de código para getters e setters.

Uso do KVC em Swift

Para utilizar KVC em Swift, é necessário que a classe derive de NSObject, e as propriedades devem ser marcadas com @objc dynamic.

import Foundation

class Person: NSObject {
    @objc dynamic var name: String
    @objc dynamic var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let person = Person(name: "Lipita", age: 25)

// Uso de KVC para acessar e modificar propriedades
person.setValue("Theo", forKey: "name")
if let name = person.value(forKey: "name") as? String {
    print("Name: \(name)")
}

person.setValue(35, forKey: "age")
if let age = person.value(forKey: "age") as? Int {
    print("Age: \(age)")
}

Key-Value Observing (KVO)

Key-Value Observing (KVO) é um mecanismo que permite que um objeto seja notificado quando o valor de uma propriedade de outro objeto é alterado. Isso é particularmente útil para a implementação de padrões de design reativos, onde as mudanças de estado precisam ser observadas e respondidas automaticamente.

Benefícios do KVO

  • Reatividade: Permite que componentes do aplicativo reajam automaticamente a mudanças de dados.

  • Desacoplamento: Facilita a comunicação entre diferentes partes do aplicativo sem que haja uma ligação direta e rígida entre elas.

Uso de KVO em Swift

Semelhante ao KVC, para usar KVO, as propriedades devem ser marcadas com @objc dynamic. Não esqueça de remover a observação quando ela não for mais necessária

class Person: NSObject {
    @objc dynamic var name: String
    @objc dynamic var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let person = Person(name: "Lupita", age: 25)

// Objeto observador
class PersonObserver: NSObject {
    var observation: NSKeyValueObservation?

    init(person: Person) {
        super.init()
        observation = person.observe(\.name, options: [.old, .new]) { object, change in
            if let newName = change.newValue {
                print("Name changed to \(newName)")
            }
        }
    }

    func invalidate() {
      observation.invalidate()
    }
}

let observer = PersonObserver(person: person)
person.name = "Bob"

Limitações e Alternativas

Embora KVO e KVC sejam recursos poderosos nos frameworks da Apple, seu uso no desenvolvimento moderno em Swift tem diminuído em favor de abordagens e padrões mais modernos.

  • Segurança: KVC e KVO dependem de strings para acessar propriedades, o que pode introduzir erros em tempo de execução se os nomes das propriedades forem incorretos.

  • Modernidade: Com o advento do Swift e suas melhorias contínuas, muitas dessas funcionalidades dinâmicas podem ser alcançadas usando técnicas mais seguras e idiomáticas ao Swift, como Property Wrappers e Combine Framework. que oferecem uma abordagem mais moderna e segura para gerenciamento de estado e reatividade.

  • Observadores de Propriedades Nativos do Swift: Os observadores de propriedades nativas do Swift (willSet e didSet) oferecem uma maneira mais limpa de observar mudanças de propriedades em comparação com KVO.

- Chaves Baseadas em Strings: KVO e KVC operam com chaves tipadas por strings, o que pode levar a erros em tempo de execução se os nomes das chaves não estiverem corretos.

- Sobrecarga de Tempo de Execução: KVO envolve sobrecarga de tempo de execução, pois depende de recursos do runtime do Objective-C. Em cenários críticos de performance, os desenvolvedores podem escolher mecanismos alternativos para alcançar funcionalidade semelhante com menor sobrecarga.

- Compatibilidade com Código Objective-C Existente: Ao trabalhar com bases de código Objective-C existentes que dependem fortemente de KVO e KVC, pode ser necessário usá-los para compatibilidade.

Conclusão

Apesar de sua eficácia, KVO e KVC têm sido gradualmente substituídos por alternativas mais modernas e seguras no desenvolvimento em Swift. O uso de observadores de propriedades nativas, a preferência por paradigmas funcionais e reativos, e a preocupação com a performance são algumas das razões pelas quais essas práticas têm perdido popularidade. No entanto, sua aplicação ainda pode ser necessária em projetos legados que dependem fortemente dessas técnicas.

Referências

[embed]How to use KVC and KVO in Swift | Jayakanthan S posted on the topic | LinkedIn Key-Value Coding (KVC) and Key-Value Observing (KVO) are Objective-C concepts that can be used in Swift, primarily when…www.linkedin.com

[embed]Difference between KVO and KVC in Swift While KVO and KVC are related and both are part of Cocoa's observation mechanism, they serve different purposes and…byby.dev

[embed]KVO & KVC In swift | HackerNoon Flow of the program depends on the value of the various variables we use in our code. Depending on the values of the…hackernoon.com


메타데이터
post_id
07a42870c044
slug
kvo-e-kvc-no-desenvolvimento-ios-com-swift-07a42870c044
url
https://medium.com/@lidianegomesbarbosa/kvo-e-kvc-no-desenvolvimento-ios-com-swift-07a42870c044
canonical_url
https://medium.com/@lidianegomesbarbosa/kvo-e-kvc-no-desenvolvimento-ios-com-swift-07a42870c044
author_url
https://medium.com/@lidianegomesbarbosa
status
ok
fetched_at
2026-08-01 05:21:09