UITextView издатель не публикует сигнал, когда пользователь нажимает на клавиатуру - PullRequest
0 голосов
/ 23 сентября 2019

Apple говорит:

В Combine также есть встроенный издатель для любого свойства, совместимого с наблюдением значения ключа.

Итак, у меня есть экземплярUITextView внутри представления контроллера представления, которое должно издавать сигнал через издателя, когда пользователь нажимает на клавиатуру, но этого не происходит.Ниже приведен фрагмент кода, который объясняет мой способ подписки на издателя

class MyViewController : UIViewController {

    var t = UITextView(frame: .init(x: 0, y: 0, width: 100, height: 20))


    override func viewDidLoad() {
    super.viewDidLoad()

        t.publisher(for: \UITextView.text)
            .receive(on: RunLoop.main)
            .sink { (str) in
                print(str)
        }

        view.addSubview(t)
    }
}

1 Ответ

1 голос
/ 29 сентября 2019

Вы не сохранили subscription aka AnyCancellable.Просто сделайте это:

class MyViewController : UIViewController {

    var t = UITextView(frame: .init(x: 0, y: 0, width: 100, height: 20))
    var set = Set<AnyCancellable>()

    override func viewDidLoad() {
    super.viewDidLoad()

        t.publisher(for: \UITextView.text)
            .receive(on: RunLoop.main)
            .sink { (str) in
                print(str)
        }.store(in: &set)

        view.addSubview(t)
    }
}
...