Swift Dictionary UIPickerView (key) 和 (value) Swift

Posted

技术标签:

【中文标题】Swift Dictionary UIPickerView (key) 和 (value) Swift【英文标题】:Swift Dictionary UIPickerView (key) and (value) Swift 【发布时间】:2020-05-05 07:33:36 【问题描述】:

我目前正在使用 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"
    
  

这是来自服务器的响应,我想在 pickerView 中显示组 listOfGrouoc

代码如下:-

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 key 。任何帮助将不胜感激。

提前致谢。

【问题讨论】:

您能否举例说明您尝试在选择器中显示的数据的哪一部分以及您希望能够在 didSelectRow 上获得什么值? @elliott-io 请检查我是否尝试仅显示名称以及选择名称时获取 Int 值。 酷。我发布了一个有效的答案。 @elliott-io 好的,我会检查并更新您。感谢您的回复 【参考方案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)
    

【讨论】:

您好 Traj,是否有任何选项可以根据键值对该数组进行排序。因为我得到了随机数组,但我想从低到高排序 @ShamDhiman 请检查我在 viewDidLoad 中的更新。 Bcz 它是 Dictionary 的特性,所以在生成数组后,我们需要按照您的预期再次对其进行排序。 @traj 谢谢你的回复,我已经尝试过了,但它不适合我 @traj 我只想排序子类型参数,如 3,6,9 当我排序时他们返回我 14,9,3,6 我不知道为什么,它对我不起作用解决方案? @ShamDhiman 与listOfGrouoc 一样,创建另一个对象并解析它,然后再次排序。告诉我你尝试对 SubTypp 进行什么排序

以上是关于Swift Dictionary UIPickerView (key) 和 (value) Swift的主要内容,如果未能解决你的问题,请参考以下文章

Swift 初学者,出现错误 UIPicker

从 NSArray 使用 UIPicker 获取 titleForRow - Swift

Swift:使用 UIPicker 自定义 DatePicker

Swift UI 中的 UIPicker

使用选定的 UIPicker 行作为自定义 UITableViewCell UILabel SWIFT 的文本

将 UITextField 的 inputView 属性设置为 UIPicker 在 Swift 中不起作用