简单 Swift 结合订阅 textDidChangeNotification

Simple Swift Combine subscribing to textDidChangeNotification

我在订阅 UITextField textDidChangeNotification 时无法使用最简单的 Combine 模式实现。

import UIKit
import Combine

class ViewController: UIViewController {

    let textField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(textField)
        textField.frame = CGRect(x: 100, y: 0, width: view.frame.width, height: 100)
        textField.placeholder = "Search"

        let sub = NotificationCenter.default.publisher(for: UITextField.textDidChangeNotification, object: textField)
            .sink { (notification) in
                print("123")
        }
    }

}

我一定是遗漏了一些非常简单的东西,但这个基本模式完全是从文档和其他教程中复制的。

感谢您的帮助。

sink 调用 returns 一个 AnyCancellable,一个模拟订阅生命周期的 ARC 管理对象。

您已将此可取消标记分配给局部变量 sub,其生命周期在最后一次使用 sub 变量时结束(不晚于 viewDidLoad() 函数作用域结束) .这导致您的订阅在任何事情发生之前就被提前取消。

如果您希望您的订阅持续更长时间,您需要延长 sub 的生命周期,或许可以将其存储为 ViewController 对象的 属性。