我在订阅 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)
我一定遗漏了一些非常简单的东西,但是这个基本模式完全是从文档和其他教程中复制的。
谢谢您的帮助。
该sink调用返回AnyCancellable一个 ARC 托管对象,它为您的订阅的生命周期建模。
您将此可取消标记分配给局部变量sub,其生命周期在最后一次使用该sub变量时结束(不迟于viewDidLoad()函数作用域结束)。这导致您的订阅在任何事情发生之前被提前取消。
如果您希望订阅持续更长时间,则需要延长 的生命周期sub,也许将其存储为ViewController对象的属性。
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |