Ios 不知怎么的,搜索控制器坏了,你知道吗?
由于某些原因,当我在搜索字段中键入时,它不会打印出Xcode控制台的“str”。我错过了什么?我遵循他的指导Ios 不知怎么的,搜索控制器坏了,你知道吗?,ios,swift,xcode,uikit,combine,Ios,Swift,Xcode,Uikit,Combine,由于某些原因,当我在搜索字段中键入时,它不会打印出Xcode控制台的“str”。我错过了什么?我遵循他的指导 您正在使用.Sink方法创建一个Sink对象,但您没有将其存储在任何位置。因此,它立即消失,并且没有可发布到的管道 这里正确的过程是将实例属性键入为Set,并在接收器上调用store(in:),将其存储在该实例属性中。现在,它将持续存在,并将有一些内容打印出来。您还可以将其存储在数组中(或者实际上存储在任何可取消的的任何随机访问集合中)。它不必是集合,除非您需要集合行为。 import
您正在使用
.Sink
方法创建一个Sink对象,但您没有将其存储在任何位置。因此,它立即消失,并且没有可发布到的管道
这里正确的过程是将实例属性键入为
Set
,并在接收器上调用store(in:)
,将其存储在该实例属性中。现在,它将持续存在,并将有一些内容打印出来。您还可以将其存储在数组中(或者实际上存储在任何可取消的的任何随机访问集合中)。它不必是集合
,除非您需要集合
行为。
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 ?? "")
}
}
}