致命错误:索引超出范围/ UIPickerView / Array / Swift

时间:2020-11-11 04:25:26

标签: arrays swift uipickerview

我的UIPickerView具有四个组件,当我尝试构建它时,可以将其返回给我。我的意思是我使行数增加了一个点,因为在Swift中,数字从0开始但没有任何作用...。 有什么问题吗?

let componentOne = [1...1000]
    let componentTwo = [1...59]
    let componentThree = [1...59]
    let componentFour = [1...10]
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 4
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if component == 0 {
            return 1000
        }
        if component == 1 {
            return 59
        }
        if component == 2 {
            return 59
        }
        if component == 3 {
            return 10
        }
        return component
    }
        
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if component == 0 {
            _ = componentOne[row]
            return "\(1000)"
            }
            if component == 1 {
                _ = componentTwo[row]
                return "\(59)"
                }
                if component == 2 {
                    _ = componentThree[row]
                    return "\(59)"
                    }
                    if component == 3 {
                        _ = componentFour[row]
                        return "\(10)"
                        }
        return nil
                    }
    

1 个答案:

答案 0 :(得分:1)

请考虑[1...10]是一个一个范围的数组,而不是10个整数的数组。

你必须写

let componentOne = Array(1...1000)
let componentTwo = Array(1...59)
let componentThree = Array(1...59)
let componentFour = Array(1...10)

为避免这些错误,请不要对numberOfRowsInComponent的返回值进行硬编码。

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    switch component {
        case 0: return componentOne.count
        case 1: return componentTwo.count
        case 2: return componentThree.count
        case 3: return componentFour.count
        default: return 0
    }

}