Kashif Kashif - 1 month ago 146
Swift Question

Xcode 8 / Swift 3 : Simple UIPicker code not working

I have protocols:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {


I have data:

let muteForPickerData = ["minute(s)","hour(s)"]


In
viewDidLoad
I have:

muteForPicker.delegate = self
muteForPicker.dataSource = self


Then I have required methods:

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return muteForPickerData.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return muteForPickerData[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
}


Still I get


type viewcontroller does not conform to protocol UIPickerViewDataSource

Answer

UIPickerViewDataSource method numberOfComponentsInPickerView is changed in Swift 3 like this that is the reason you are getting this error.

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

For more detail read Apple Documentation on UIPickerView.

Note: You need to also add _ as first parameter label same like other methods in your UIPickerViewDelegate method that is titleForRow and didSelectRow.

Comments