You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:15:35