简单的 Swift 组合订阅 textDidChangeNotification

Tin*_*ong 3 frp swift combine

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

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")
        }
    }

}

Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助。

Ale*_*ica 5

sink调用返回AnyCancellable一个 ARC 托管对象,它为您的订阅的生命周期建模。

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

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