Значение типа «x» не имеет члена «в нижнем регистре».

Я пытаюсь внедрить панель поиска в свое табличное представление. Но я получаю эту ошибку. Значение типа «getUserData» не имеет члена «нижнего регистра» в этом коде.

filteredDataBySearch = dataSourceArray.filter({ (data:String) -> Bool in
    return data.lowercased().rangeOfString(searchText.lowercased()) != nil
})

Вот мой код:

@IBOutlet weak var FSuserLIst: UITableView!
var dataSourceArray1 = [getUserData]()
var dataSourceArray2 = [getUserData]()
var dataSourceArray3 = [getUserData]()
var dataSourceArray4 = [getUserData]()
let searchBar = UISearchBar()
var showSearchResults = false
var filteredDataBySearch = [getUserData]()

А вот моя функция для поиска

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    showSearchResults = true
    searchBar.endEditing(true)
    self.FSuserLIst.reloadData()

}

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    if segmentedData.selectedSegmentIndex == 0 {

        filteredDataBySearch = dataSourceArray.filter({ (data:String) -> Bool in

            return data.lowercased().rangeOfString(searchText.lowercased()) != nil
        })

        if searchText != "" {

            showSearchResults = true
            self.FSuserLIst.reloadData()
        } else {
            showSearchResults = false
            self.FSuserLIst.reloadData()
        }
    }

    else if segmentedData.selectedSegmentIndex == 1 {

        filteredDataBySearch = dataSourceArray1.filter({ (data:String) -> Bool in

            return data.lowercased().rangeOfString(searchText.lowercased()) != nil
        })

        if searchText != "" {

            showSearchResults = true
            self.FSuserLIst.reloadData()
        } else {
            showSearchResults = false
            self.FSuserLIst.reloadData()
        }
    }

    else if segmentedData.selectedSegmentIndex == 2 {

        filteredDataBySearch = dataSourceArray2.filter({ (data:String) -> Bool in

            return data.lowercased().rangeOfString(searchText.lowercased()) != nil
        })

        if searchText != "" {

            showSearchResults = true
            self.FSuserLIst.reloadData()
        } else {
            showSearchResults = false
            self.FSuserLIst.reloadData()
        }
    }

  else if segmentedData.selectedSegmentIndex == 3 {

        filteredDataBySearch = dataSourceArray3.filter({ (data:String) -> Bool in

            return data.lowercased().rangeOfString(searchText.lowercased()) != nil
        })

        if searchText != "" {

            showSearchResults = true
            self.FSuserLIst.reloadData()
        } else {
            showSearchResults = false
            self.FSuserLIst.reloadData()
        }
    }
}

«getUserData» — это класс, который имеет более 10 переменных и находится в другом файле Swift.

Я очень ценю любую помощь, спасибо.


person Ricardo Milos    schedule 16.07.2018    source источник
comment
getUserData не является строкой, почему вы пытаетесь отфильтровать ее в строку? Также имя класса никогда не должно называться так, должно быть UserData или что-то в этом роде.   -  person Tj3n    schedule 16.07.2018
comment
Что я должен фильтровать? Я новичок в этом... Спасибо.   -  person Ricardo Milos    schedule 16.07.2018
comment
Добавьте класс getUserData. Имя класса всегда начинается с заглавной буквы.   -  person Sharad Chauhan    schedule 16.07.2018


Ответы (1)


Вы пытаетесь преобразовать класс getUserData в нижний регистр. Вы хотите получить доступ к строке в этом классе, а затем преобразовать ее. Я не проверял это, но вы ищете что-то в этом роде.

filteredDataBySearch = dataSourceArray.filter({ (userData:MyUserDataClass) -> Bool in

    let data = userData.myStringInThisClass.lowercased()

    return data.contains(searchText.lowercased())
})

Это будет получение переменной в классе, которая является строкой, и преобразование ее в нижний регистр.

В качестве примечания: типичным соглашением является использование заглавных букв для имени класса, т.е. MyClass

person Steve    schedule 16.07.2018