Словарь Swift UIPickerView (ключ) и (значение) Swift

В настоящее время я разрабатываю приложение с использованием Swift, где я использую UIPickerView. Я хочу установить значение в pickerView (myPickerView)

let PickerData = {
"listOfGrouoc": {
    "1": "DDDDD",
    "2": "SDDDDD",
    "3": "TTTT"
},
"TypeOfGrpos": [
    "STTTTT",
    "TTTTT"
],
"SubTypp": {
    "3": "Shh",
    "6": "SSS",
    "9": " dfdf"
    "14": "Shh",
    "21": "SSS",
    "60": " dfdf"
},
"GropName": {
    "1": "test",
     "2": "test"
    }
  }

Вот ответ от сервера, я хочу показать группу listOfGrouoc в pickerView

Код ниже: -

В viewDidLoad у меня есть:

Picker.delegate = self
Picker.dataSource = self

Затем у меня есть необходимые методы:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
            return 1
        }

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return PickerData.count
        }

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return PickerData[row] trying to show SSSSS,DDDDD,GGGGG
        }

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
       print(PickerData[row]) expecting only id Int Value
    }

Вопрос: - Может кто-нибудь объяснить мне, как установить значение dict в заголовке представления выбора и при нажатии на didSelectRow получить ключ dict. Любая помощь будет принята с благодарностью.

Заранее спасибо.


person Sham Dhiman    schedule 05.05.2020    source источник
comment
Можете ли вы привести пример того, какую часть ваших данных вы пытаетесь отобразить в средстве выбора и какое значение вы ожидаете получить от didSelectRow?   -  person elliott-io    schedule 05.05.2020
comment
@ elliott-io Пожалуйста, проверьте, я пытаюсь показать только имя, и при выборе имени получаю значение Int.   -  person Sham Dhiman    schedule 05.05.2020
comment
Прохладный. Я опубликовал ответ, который работает.   -  person elliott-io    schedule 05.05.2020
comment
@elliott-io хорошо, я проверю и сообщу вам. Спасибо за ваш ответ   -  person Sham Dhiman    schedule 05.05.2020


Ответы (1)


Из ваших данных я создаю новое имя объекта CustomObject и анализирую данные, которые будут отображаться в средстве выбора.

Вот мой код:

struct CustomObject {
    let id: String
    let name: String
    init(id: String, name: String) {
        self.id = id
        self.name = name
    }
}
class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    let PickerData: [String : Any] = ["listOfGrouoc": ["1": "DDDDD","2": "SDDDDD","3": "TTTT"],"TypeOfGrpos": ["STTTTT","TTTTT"],"SubTypp": ["333": "Shh","334": "SSS","543": " dfdf"],"GropName": ["1": "test","2": "test"]]
    var listOfGrouoc: [CustomObject] = []


    override func viewDidLoad() {
        super.viewDidLoad()

        let picker = UIPickerView(frame: CGRect(x: 0, y: 50, width: 300, height: 200))
        picker.dataSource = self
        picker.delegate = self
        self.view.addSubview(picker)

        if let list = PickerData["listOfGrouoc"] as? [String: String] {
            for objectID in list.keys {
                if let name = list[objectID] {
                    self.listOfGrouoc.append(CustomObject(id: objectID, name: name))
                }
            }
        }
        //Sort here
        self.listOfGrouoc.sort(by: { $0.id < $1.id})
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return listOfGrouoc.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return listOfGrouoc[row].name
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        print(listOfGrouoc[row].id)
    }
}
person Trai Nguyen    schedule 05.05.2020
comment
Здравствуйте, Traj, есть ли возможность отсортировать этот массив по значению ключа. потому что я получаю случайный массив, но я хочу отсортировать от низшего к высшему - person Sham Dhiman; 06.05.2020
comment
@ShamDhiman, пожалуйста, проверьте мое обновление в viewDidLoad. Bcz это характерно для словаря, поэтому после создания массива нам нужно отсортировать его снова, как вы ожидали. - person Trai Nguyen; 07.05.2020
comment
@traj спасибо за ваш ответ, я уже пробовал это, но у меня это не работает - person Sham Dhiman; 07.05.2020
comment
@traj я хочу отсортировать только параметр подтипа, например 3,6,9, когда я сортирую это, они возвращают мне 14,9,3,6, я не знаю почему, это не работает для меня какое-либо решение? - person Sham Dhiman; 07.05.2020
comment
@ShamDhiman сделайте то же самое, что и listOfGrouoc , создайте другой объект и проанализируйте его, после этого просто отсортируйте снова. Покажи мне, что ты пытался отсортировать SubTypp - person Trai Nguyen; 07.05.2020
comment
@Traj, пожалуйста, проверьте этот снимок экрана, вот результат, полученный с сервера, и после сортировки, если я ошибаюсь, пожалуйста, дайте мне правильный способ сортировки от меньшего к высокому означает от 3 до 60. Пожалуйста, дайте мне знать ваш точка. Спасибо. Ссылка: i.stack.imgur.com/5LlcQ.png - person Sham Dhiman; 10.05.2020