首页 > 解决方案 > 是否可以将 UIPickerView 与 if 函数一起使用,具体取决于(例如)UISegmentedControll?

问题描述

我想根据 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' 的函数中缺少返回”

标签: swiftuitextfielduisegmentedcontrol

解决方案


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

有几种方法可以解决这个问题:

  1. 在最后if放入一个 fatalError 后崩溃
//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,以便我找出我是否犯了逻辑错误。


推荐阅读