Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 简单快速组合订阅textDidChangeNotification_Swift_Frp_Combine - Fatal编程技术网

Swift 简单快速组合订阅textDidChangeNotification

Swift 简单快速组合订阅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

我很难让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")
        }
    }

}

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


感谢您的帮助。

调用
sink
将返回一个
anycancelable
,一个ARC管理的对象,用于模拟订阅的生存期

您将此可取消标记分配给局部变量
sub
,其生存期在
viewDidLoad()
函数作用域的末尾结束。这导致您的订阅在任何事情发生之前提前取消


如果您想让订阅持续更长时间,您需要延长
sub
的生存期,可能需要将其存储为
ViewController
对象的属性。

Alexander您是一位绅士和学者。谢谢你的回答,标记为正确。@Tinlong很难,我之前刚刚努力过这一点。:)您还应该研究,当您有许多不同的生命周期需要管理时,它可以简化您的代码。它使
Set
的工作方式类似于RxSwift的
DisposeBag