Swift 简单快速组合订阅textDidChangeNotification
我很难让Combine模式的最简单实现正常工作,订阅UITextField textDidChangeNotificationSwift 简单快速组合订阅textDidChangeNotification,swift,frp,combine,Swift,Frp,Combine,我很难让Combine模式的最简单实现正常工作,订阅UITextField textDidChangeNotification import UIKit import Combine class ViewController: UIViewController { let textField = UITextField() override func viewDidLoad() { super.viewDidLoad() view.addS
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
将返回一个anycancelable
,一个ARC管理的对象,用于模拟订阅的生存期
您将此可取消标记分配给局部变量sub
,其生存期在viewDidLoad()
函数作用域的末尾结束。这导致您的订阅在任何事情发生之前提前取消
如果您想让订阅持续更长时间,您需要延长
sub
的生存期,可能需要将其存储为ViewController
对象的属性。Alexander您是一位绅士和学者。谢谢你的回答,标记为正确。@Tinlong很难,我之前刚刚努力过这一点。:)您还应该研究,当您有许多不同的生命周期需要管理时,它可以简化您的代码。它使Set
的工作方式类似于RxSwift的DisposeBag
。