防止用户在搜索栏中键入重复的数字

时间:2019-09-01 06:32:06

标签: ios swift

我的代码似乎太长,甚至还不完整!

我正在尝试避免在搜索栏中出现重复。 我只能将它用于第一个条目。

玩了一段时间之后,但我敢肯定它比我看上去要简单的多。

    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的功能。 有几个按钮。

2 个答案:

答案 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)
}