致命错误:索引超出范围 / UIPickerView /Array/ Swift
Posted
技术标签:
【中文标题】致命错误:索引超出范围 / UIPickerView /Array/ Swift【英文标题】:Fatal Error: Index out of Range / UIPickerView /Array/ Swift 【发布时间】:2020-11-11 04:25:26 【问题描述】:我的 UIPickerView 有四个组件,当我尝试构建它时,它会返回给我。我该怎么办我的意思是我将行数增加了一个点,因为在 Swift 中,数字从 0 开始,但没有任何效果...... 有什么问题?
let componentOne = [1...1000]
let componentTwo = [1...59]
let componentThree = [1...59]
let componentFour = [1...10]
func numberOfComponents(in pickerView: UIPickerView) -> Int
return 4
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
if component == 0
return 1000
if component == 1
return 59
if component == 2
return 59
if component == 3
return 10
return component
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
if component == 0
_ = componentOne[row]
return "\(1000)"
if component == 1
_ = componentTwo[row]
return "\(59)"
if component == 2
_ = componentThree[row]
return "\(59)"
if component == 3
_ = componentFour[row]
return "\(10)"
return nil
【问题讨论】:
你想达到什么目的?componentOne
是 Array
吗?
哪行代码出错了?
@aheze 在这一行:if component == 0
@Rob 当然是的
认为[1...10]
是一个一个 范围的数组,而不是10 个整数的数组。
【参考方案1】:
考虑[1...10]
是一个一个 范围的数组,而不是一个10 个整数的数组。
你必须写
let componentOne = Array(1...1000)
let componentTwo = Array(1...59)
let componentThree = Array(1...59)
let componentFour = Array(1...10)
为避免这些错误,请勿对numberOfRowsInComponent
的返回值进行硬编码。
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
switch component
case 0: return componentOne.count
case 1: return componentTwo.count
case 2: return componentThree.count
case 3: return componentFour.count
default: return 0
【讨论】:
以上是关于致命错误:索引超出范围 / UIPickerView /Array/ Swift的主要内容,如果未能解决你的问题,请参考以下文章