Каким-то образом объединиться с поисковым контроллером не работает, любая идея? - PullRequest
0 голосов
/ 15 февраля 2020

По какой-то причине, когда я набираю в поле поиска, Xcode не выводит на консоль "str". Что мне здесь не хватает? Я следовал его уроку https://www.letsbuildthatapp.com/course_video?id=5232

import UIKit

class SearchViewController: UIViewController {

    let searchController = UISearchController(searchResultsController: nil)

    var sink: Any?

    override func viewDidLoad() {
        super.viewDidLoad()

        setupSearchBarListener()

        navigationItem.searchController = searchController

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.title = "Contact"

        searchController.obscuresBackgroundDuringPresentation = false

        view.backgroundColor = .white
    }

    fileprivate func setupSearchBarListener() {

        let publisher = NotificationCenter.default.publisher(for: UISearchTextField.textDidChangeNotification, object: searchController.searchBar.searchTextField)
        publisher
            .map {
            ($0.object as! UISearchTextField).text
        }
            .debounce(for: .milliseconds(500), scheduler: RunLoop.main)
            .sink { (str) in
                print(str ?? "")
        }

    }
}

1 Ответ

0 голосов
/ 15 февраля 2020

Вы создаете объект Sink методом .sink, но нигде не храните его. Поэтому он сразу же прекращает свое существование, и нет никакого конвейера для публикации sh в.

Правильная процедура здесь - это иметь свойство экземпляра, типизированное как Set<AnyCancellable>, и вызывать store(in:) в вашем приемнике для хранения. это в этом случае свойство. Теперь оно сохранится и будет что-то распечатано.

...