如何解决“无法快速为下标为'Int'的索引下标'ClosedRange <Int>'的值”

时间:2019-06-15 09:32:50

标签: ios arrays swift countdowntimer numberpicker

我想为我的作业准备一个基本的号码选择计时器,但是我无法解决此问题。

var timer = Timer()
    var counter = 0

    //let number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"]

    let number = 1 ... 60

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return number[row]
    }




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

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        label.text = number[row]

    } 

但是它给出了这个错误。

  

不能为索引为“ Int”的“ ClosedRange”类型下标

3 个答案:

答案 0 :(得分:0)

您正在创建一个数组,因此需要在该范围内使用方括号。

let numbers = [1...60]

答案 1 :(得分:0)

您需要一个字符串数组[String],但是您声明了一个整数范围ClosedRange<Int>

根据范围创建一个数组,并将项目映射到String

let number = Array(1...60).map(String.init)

建议以复数形式let numbers声明数组

答案 2 :(得分:0)

您可以简单地做到:

let numbers = Array(1...60)

这是如何工作的?

您可以自己探索。一个技巧是添加显式的init调用:

Array.init(1...60)

,然后选项-单击init。当您这样做时,您会得到:

  

摘要

     

创建一个包含序列元素的数组。声明

init<S>(_ s: S) where Element == S.Element, S : Sequence
     

讨论

     

您可以使用此初始值设定项从任何其他类型创建数组   符合序列协议。例如,您可能想要   创建一个从1到7的整数的数组。使用此数组   围绕某个范围的初始值设定项,而不是在   数组文字。

let numbers = Array(1...7)
print(numbers)
// Prints "[1, 2, 3, 4, 5, 6, 7]"