是否可以将UIPickerView与if函数一起使用(例如,取决于UISegmentedControll?

问题描述 投票:0回答:1

我想根据SegmentedControll在TextField中创建选择器视图。

刚开始使用某些if函数进行编码...但是由于func不返回Int,所以无法正常工作。

func functionOne() {
        createJobToolBar()
        aufgabenPicker = UIPickerView()
        aufgabenPicker?.delegate = self
        aufgabenPicker?.dataSource = self

        jobTF.inputView = aufgabenPicker
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if categorySC.isEnabledForSegment(at: 1) {
            return jobsHaus.count
        }else if categorySC.isEnabledForSegment(at: 2) {
            return jobsGarten.count
        }else if categorySC.isEnabledForSegment(at: 3) {
            return jobsBetreuung.count
        }else if categorySC.isEnabledForSegment(at: 4) {
            return jobsSonstiges.count
        }
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if categorySC.isEnabledForSegment(at: 1) {
            return jobsHaus[row]
        }else if categorySC.isEnabledForSegment(at: 2) {
            return jobsGarten[row]
        }else if categorySC.isEnabledForSegment(at: 3) {
            return jobsBetreuung[row]
        }else if categorySC.isEnabledForSegment(at: 4) {
            return jobsSonstiges[row]
        }
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if categorySC.isEnabledForSegment(at: 1) {
            jobTF.text = jobsHaus[row]
        }else if categorySC.isEnabledForSegment(at: 2) {
            jobTF.text = jobsGarten[row]
        }else if categorySC.isEnabledForSegment(at: 3) {
            jobTF.text = jobsBetreuung[row]
        }else if categorySC.isEnabledForSegment(at: 4) {
            jobTF.text = jobsSonstiges[row]
        }
    }

由于缺少返回值而导致的当前错误消息:“函数中缺少返回值,期望返回'Int'”

swift uitextfield uisegmentedcontrol
1个回答
0
投票

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int)方法中,您基于多个if ... else语句返回一个值。这些可能涵盖了您所有可能的情况,但编译器无法推断出这种情况,并且可以看到所有四个检查均失败并因此不返回任何值的可能性。

有几种解决方法:

  1. 在最后一个if出现致命错误后崩溃
//cut earlier code for brevity
  else if categorySC.isEnabledForSegment(at: 4) {
            return jobsSonstiges.count
  }
  fatalerror("Invalid segment logic")
}
  1. 返回一个随机数,如果您的逻辑是正确的,则返回它的代码流永远不会那么远:
//cut earlier code for brevity

  else if categorySC.isEnabledForSegment(at: 4) {
            return jobsSonstiges.count
  }
  return 999
}
  1. 根据它是剩下的唯一可能的值,省略最后的if检查,然后返回该值:
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if categorySC.isEnabledForSegment(at: 1) {
            return jobsHaus[row]
        }else if categorySC.isEnabledForSegment(at: 2) {
            return jobsGarten[row]
        }else if categorySC.isEnabledForSegment(at: 3) {
            return jobsBetreuung[row]
        }else {
            return jobsSonstiges[row]
        }
    }

至少在开发过程中,我的偏好是选项1,这样我就可以确定自己是否犯了逻辑错误。

© www.soinside.com 2019 - 2024. All rights reserved.