Search code examples
classswiftinstanceuipickerview

Accessing a variable stored within a class Swift


I can't figure out why I can't access this variable, see below, I want the value of sport result when it's clicked, however sportResult.selectedSport returns nil?

let sportPickerData = SportPickerData()

    override func viewDidLoad() {
      super.viewDidLoad()

        sportPickerView.delegate = sportPickerData
        sportPickerView.dataSource = sportPickerData


class SportPickerData: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    var sports = ["Football", "Baseball", "Hockey", "Basketball"]

    var selectedSport: String?

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

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

    func pickerView(yearPicker: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        selectedSport = sports[row]
    }

    func pickerView(yearPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return "\(sports[row])"
        }
}

let sportResult = SportPickerData()


@IBAction func button(sender: UIButton) {
    label.text = sportResult.selectedSport
    }

Solution

  • sportResult its not a delegate or a data source of your picker view so its selectedSport property will never be initialized since its didSelectRow method will be never called. To get the selectedSport you have to get it from sportPickerData which is actually the delegate and data source of your picker

    let sportResult = SportPickerData() // delete this line 
    
    
    @IBAction func button(sender: UIButton) {
        label.text = sportPickerData.selectedSport
    }