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

Posted

技术标签:

【中文标题】致命错误:索引超出范围 / UIPickerView /Array/ Swift【英文标题】:Fatal Error: Index out of Range / UIPickerView /Array/ Swift 【发布时间】:2020-11-11 04:25:26 【问题描述】:

我的 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
                    
    

【问题讨论】:

你想达到什么目的? componentOneArray 吗? 哪行代码出错了? @aheze 在这一行:if component == 0 @Rob 当然是的 认为[1...10] 是一个一个 范围的数组,而不是10 个整数的数组。 【参考方案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
    


【讨论】:

以上是关于致命错误:索引超出范围 / UIPickerView /Array/ Swift的主要内容,如果未能解决你的问题,请参考以下文章

Swift 致命错误:数组索引超出范围

Swift 致命错误:数组索引超出范围

致命错误 索引超出范围

致命错误:索引超出范围

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

(Swift) 致命错误:索引超出范围