不知何故结合搜索控制器不起作用,知道吗?
Somehow combine with search controller not working, any idea?
出于某种原因,当我在搜索字段中键入内容时,它不会打印出 Xcode console the "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 {
([=10=].object as! UISearchTextField).text
}
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
.sink { (str) in
print(str ?? "")
}
}
}
您正在使用 .sink
方法创建 Sink 对象,但并未将其存储在任何地方。因此它立即消失并且没有发布管道。
此处正确的过程是将实例 属性 键入为 Set<AnyCancellable>
并在您的接收器上调用 store(in:)
以将其存储在该实例 属性 中。现在它会持续存在,并且会有一些东西可以打印出来。
出于某种原因,当我在搜索字段中键入内容时,它不会打印出 Xcode console the "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 {
([=10=].object as! UISearchTextField).text
}
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
.sink { (str) in
print(str ?? "")
}
}
}
您正在使用 .sink
方法创建 Sink 对象,但并未将其存储在任何地方。因此它立即消失并且没有发布管道。
此处正确的过程是将实例 属性 键入为 Set<AnyCancellable>
并在您的接收器上调用 store(in:)
以将其存储在该实例 属性 中。现在它会持续存在,并且会有一些东西可以打印出来。