Фильтрация данных из массива - PullRequest
0 голосов
/ 17 января 2019

У меня есть класс, который используется для UIViewController, и он использует http для получения некоторых данных.

class NCHINViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var RequestTokenBTN: UIButton!]
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var listIdTF: UITextField!
    @IBOutlet weak var listNameTF: UITextField!

    //set pickerView
    var PDVListId: [clsSpinnerNCHIN] = []
    var arrayMissingLI: [String] = [String]()
    var arrayMissingLN: [String] = [String]()

    override func viewDidLoad() {
        ...
    }

    override func didReceiveMemoryWarning() {
        ...
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        pickerView.subviews.forEach({
            $0.isHidden = $0.frame.height < 1.0
        })
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        //return pickerData.count
        if pickerView == listNameTF.inputView{
            return PDVListId.count
        } else {
            return PDVListName.count
        }
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        //return pickerData[row]
        if pickerView == listNameTF.inputView{
            return PDVListId[row].listName
        } else {
            return PDVListName[row]
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if pickerView == listNameTF.inputView{
            return listNameTF.text = PDVListId[row].listName
        } else {
            return listIdTF.text = PDVListName[row]
        }
    }

    func reqNomSpinnerNCHIN(){
        NetworkingService.shared.reqSpinnerNominalCashin()  { spinnerResponse in
            if (spinnerResponse == nil) {
                self.view.makeToast("Technical problem, please try again...")
            } else {

                if (spinnerResponse?.success == Const.ResponseKey.Success) {
                    print(spinnerResponse ?? "")
                    self.PDVListId = (spinnerResponse?.data)!
                } else {

                    let popup = PopupDialog(title: "Failed", message: spinnerResponse?.error)
                    let buttonOK = DefaultButton(title: "OK") {

                    }
                    popup.addButton(buttonOK)
                    self.present(popup,animated: true,completion: nil)
                }
            }
        }
    }
}

spinnerResponse?.data является clsSpinnerNCHIN

В этом случае я хочу отфильтровать данные внутри PDVListID, что данные были вставлены из spinnerResponse.data

например: Если я получаю ответ от сервера

    T = In
    LI = 001
    LN = CG1

    T = Out
    LI = 001
    LN = CG2

    T = Missing
    LI = 001
    LN = CG3

    T = Out
    LI = 002
    LN = CG4

    T = In
    LI = 002
    LN = CG5

А вот что я хочу сделать

if userData.type == "Missing" {
    //put all data from "LI" that "T == Missing" that i got from `spinnerResponse?.data` and save it into arrayMissingLI
    //put all data from "LN" that 'T == Missing" that i got from `spinnerResponse?.data` and save it into arrayMissingLN
}

Как я могу отфильтровать каждый из T и поместить LI в arrayMissingLN и arrayMissingLI и использовать его в PickerView для отображения данных, если я выберу Отсутствующие, Вне и В

1 Ответ

0 голосов
/ 17 января 2019
 if let apiResponseData = spinnerResponse.data{

        arrayMissingLI.removeAll()
        arrayMissingLN.removeAll()

        _ = apiResponseData.filter { (dic) -> Bool in
            if dic.T == "Missing"{
                arrayMissingLI.append(dic.LI)
                arrayMissingLN.append(dic.LN)
            }
        }

    }

Попробуй это. Это даст вам массив arrayMissingLI и arrayMissingLN. Дайте мне знать, если у вас есть какие-либо проблемы.

...