我的代码似乎太长,甚至还不完整!
我正在尝试避免在搜索栏中出现重复。 我只能将它用于第一个条目。
玩了一段时间之后,但我敢肯定它比我看上去要简单的多。
var search : String = ("1, ")
let numbers = search.map { String($0) }
let duplicates = Array(Set(numbers.filter({ (i: String) in numbers.filter({ $0 == i }).count > 1})))
for item in duplicates
{
search = search.replacingOccurrences(of: item, with: "")
}
if mainSearchBar.text != search
{
mainSearchBar.text = (mainSearchBar.text ?? "") + search
}
输入的第一个数字(逗号和空格,共3个字符)在第二次输入时不会重复,这很好。
我希望搜索栏中已有的任何数字都不会重复。
上面的代码是按钮1的功能。 有几个按钮。
答案 0 :(得分:2)
有一个UISearchBarDelegate
方法可以帮助您。我希望这对您有帮助:
使用此方法,您可以确保新字符串中不会包含重复的字符
func removeDuplicates(in searchText: String) -> String {
var newString = ""
searchText.forEach { character in
if !newString.contains(character) {
newString.append(character)
}
}
return newString
}
然后您必须从UISearchBarDelegate继承
extension **YourControllerName**: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.text = removeDuplicates(in: searchText)
}
}
为使此工作正常进行,必须在代码中的某个位置设置mainSearchBar.delegate = self
。通常在viewDidLoad
中。
答案 1 :(得分:1)
感谢emelagumat,我设法使它像这样工作。
func removeDuplicates(in searchText: String) -> String
{
let search : String = (mainSearchBar.text ?? "")
var newString = search
searchText.forEach
{
character in
if !newString.contains(searchText)
{
newString.append(searchText)
}
}
return newString
}
@objc func button1Tap()
{
let search : String = ("1, ")
mainSearchBar.text = removeDuplicates(in: search)
}