Search code examples
iosswiftuipickerview

Setting up two UIPickerviews in one view


I'm having trouble Setting up two UIPickerviews in one view in my beginner Swift project and I keep getting a Cannot subscript a value of type '[Range<Int>]' error and I just can't get my head wrap around what I'm doing wrong. I'm working on this project to learn swift.

@IBOutlet weak var hourWorkedPicker: UIPickerView!
@IBOutlet weak var payRatePicker: UIPickerView!
@IBOutlet weak var total: UILabel!


let hoursWorked = [10...60]
let payRate = [9...50]

override func viewDidLoad() {
    super.viewDidLoad()
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == hourWorkedPicker {
        return hoursWorked.count
    } else { // if it's the second picker view
        return payRate.count
    }
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == hourWorkedPicker {
        return hoursWorked[row] //ERORR IS HERE <-----------------------------
    } else {
        return payRate[row] //ERORR IS HERE <--------------------------------
    }
}

Solution

  • let hoursWorked = [10...60]
    let payRate = [9...50]
    

    These are Range variables and not arrays. You can use subscript only for arrays. Hence it failed at

    return hoursWorked[row]
    

    So, you should convert your range to an array.

    To convert, you can use something like follows

    let hoursWorked: [Int] = Array(10...60)
    or
    let hoursWorked = [Int](10...60)