---
title: Sử dụng observe property của Swift thay vì KVO cũ
impact: MEDIUM
impactDescription: Tránh sử dụng cơ chế KVO lỗi thời, giảm thiểu độ phức tạp và lỗi khi override observeValue.
tags: swift, ios, kvo, observation, code-quality
---

## Sử dụng observe property của Swift thay vì KVO cũ

Ưu tiên dùng block-based KVO API với `keypaths` khi dùng Swift 3.2 trở lên. Loại bỏ việc override `observeValue` truyền thống vốn phức tạp và dễ sai.

**Incorrect (KVO cũ):**

```swift
class MyObserver: NSObject {
    @objc var objectToObserve: MyObject
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "someProperty" {
            // Xử lý thay đổi
        }
    }
}
```

**Correct (Block-based KVO):**

```swift
class MyObserver {
    var observation: NSKeyValueObservation?
    
    init(object: MyObject) {
        observation = object.observe(\.someProperty, options: [.new]) { object, change in
            // Xử lý thay đổi qua block
        }
    }
}
```

**Tools:** SwiftLint (block_based_kvo)
