swift - 是否可以将 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' 的函数中缺少返回”
解决方案
在您的func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int)
方法中,您根据许多if ... else
语句返回一个值。这些可能涵盖了您所有可能的情况,但编译器无法推断出这一点,并且可以看到所有四个检查都失败并且因此没有返回值的可能性。
有几种方法可以解决这个问题:
- 在最后
if
放入一个 fatalError 后崩溃
//cut earlier code for brevity
else if categorySC.isEnabledForSegment(at: 4) {
return jobsSonstiges.count
}
fatalerror("Invalid segment logic")
}
- 返回一个随机数,如果你的逻辑是正确的,那么代码流永远不会那么远:
//cut earlier code for brevity
else if categorySC.isEnabledForSegment(at: 4) {
return jobsSonstiges.count
}
return 999
}
- 省略最后一次
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,以便我找出我是否犯了逻辑错误。
推荐阅读
- java - Java ECDSAwithSHA256 签名长度不一致
- java - 如何将 api 中的数据作为 setText 中的数组传递
- android - Android 相当于 Nibs?
- content-management-system - 酒店/宾馆目录-开源软件/CMS推荐
- python-2.7 - 我需要使用 nerodia 从下面的下拉菜单中选择一个元素
- prolog - 通过 corecursion 在 Prolog 中解决动态规划
- angularjs - 如何使用 $scope 变量在 ng-options 中预先选择默认选项
- java - Java + Reactor:每条记录的Http调用
- python - 如何在卷积神经网络和自动编码器中仅对灰度图像使用两个通道而不是 3 通道 RGB
- javascript - 如何更紧凑地使用多个选择器和事件编写此 jQuery 代码?