user14469311
user14469311

Reputation:

Fatal Error: Index out of Range / UIPickerView /Array/ Swift

My UIPickerView with four components gives me this back when I'm trying to build it. What should I do I mean I made the number Of Rows one Point bigger because in Swift numbers start at 0 but nothing worked.... What is the problem?

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
                    }
    

Upvotes: 0

Views: 109

Answers (1)

vadian
vadian

Reputation: 285059

Consider that [1...10] is an array of one range, not an array of 10 integers.

You have to write

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

To avoid those errors don't hard-code the return values of 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
    }

}

Upvotes: 1

Related Questions