如何通过Switch/Case转换数组数字为字符串并填充Picker View
嘿,我来帮你搞定这个Picker View的填充问题!你想用Switch/Case把数字型的size转成对应字符串,这个思路非常靠谱,下面我给你一步步拆解怎么把这个逻辑整合到代码里:
第一步:写一个数字转尺寸字符串的转换函数
先单独封装一个转换函数,把数字size映射成你需要的字符串,这样逻辑更清晰也方便维护:
func getSizeString(from sizeNumber: Int) -> String { switch sizeNumber { case 3: return "小号(S)" case 4: return "中号(M)" case 5: return "大号(L)" case 6: return "加大号(XL)" // 这里根据你的实际需求补充更多数字对应的字符串 default: return "未知尺寸" // 处理不在预期内的数字 } }
第二步:处理数据源数组,生成Picker可用的字符串数组
拿到接口返回的tempProducts数组后,我们可以用map方法快速把所有数字size转换成字符串,生成Picker需要的数据源:
// 假设tempProducts是你从接口获取的原始数据数组 var pickerDataSource: [String] = [] // 写法1:用for循环遍历(直观易懂) for product in tempProducts { let sizeStr = getSizeString(from: product.size) pickerDataSource.append(sizeStr) } // 写法2:用map简化代码(更简洁) pickerDataSource = tempProducts.map { getSizeString(from: $0.size) }
如果你的tempProducts里有重复的size值,不想让Picker显示重复选项,可以先去重再转换:
// 先提取所有不重复的size数字,再转成字符串 let uniqueSizeNumbers = Set(tempProducts.map { $0.size }) pickerDataSource = uniqueSizeNumbers.map { getSizeString(from: $0) }.sorted() // sorted()可选,用来给尺寸排序
第三步:把数据源绑定到Picker View
下面分两种常见的框架示例给你参考:
SwiftUI 版本
@State private var selectedSize = "" var body: some View { Picker("选择尺寸", selection: $selectedSize) { ForEach(pickerDataSource, id: \.self) { sizeStr in Text(sizeStr) } } }
UIKit 版本
如果用的是UIPickerView,记得设置它的数据源和代理:
// 先让你的ViewController遵循UIPickerViewDataSource和UIPickerViewDelegate class YourViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { var pickerDataSource: [String] = [] @IBOutlet weak var sizePicker: UIPickerView! override func viewDidLoad() { super.viewDidLoad() sizePicker.dataSource = self sizePicker.delegate = self // 这里调用前面的代码生成pickerDataSource // ... } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 // Picker只有一个列 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerDataSource.count } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerDataSource[row] } }
这样整个逻辑就完全整合起来啦,你只需要根据自己的实际尺寸映射关系修改Switch/Case里的内容就行~
内容的提问来源于stack exchange,提问作者Doing Things Occasionally
相关产品推荐
相关产品推荐

