首先先看看這個 extension
extension UITextField {
    var textPublisher: AnyPublisher<String?, Never> {
        NotificationCenter.default // 1
            .publisher(for: UITextField.textDidChangeNotification, object: self)
            .compactMap { $0.object as? UITextField } // 2
            .filter { $0 == self } // 3
            .map { $0.text}
            .eraseToAnyPublisher()
    }
}
NotificationCenter的 Publisher透過這樣的方式, 我們可以創造 UITextField 的事件流!
import Combine
class ViewController: UIViewController {
    @IBOutlet  var aTextFileld: UITextField!
    @IBOutlet  var bTestField: UITextField!
    var set = Set<AnyCancellable>()
    
    let vc = UIViewController()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        aTextFileld.textPublisher
            .assign(to: \UITextField.text, on: bTestField)
        .store(in: &set)
    }
}
如此, 就可以利用 UIKit 來理解 Combine 了
簡單測驗:
UICotrol
參考來源: Multiple UITextFields and textDidChangeNotification notification
https://stackoverflow.com/a/56796398/10172299
好奇問一下 Combine現在還沒有類似Rxcocoa的東西嗎
我對 RxCocoa 不熟,要類似什麼呢?
就是做你上面做的事 一整包對UI的extension
目前 Apple 主要在 SwiftUI 有建立,未來不確定喔