как исправить "Не удается подписать значение типа 'ClosedRange <Int>' с индексом типа 'Int' в swift" - PullRequest
0 голосов
/ 15 июня 2019

Я хочу подготовить базовый таймер выбора номера для своей домашней работы, но я не могу решить эту проблему.

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]

    } 

Но он выдает эту ошибку.

Невозможно указать значениетип 'ClosedRange' с индексом типа 'Int'

Ответы [ 3 ]

0 голосов
/ 15 июня 2019

Вам нужен массив строк [String], но вы объявляете целочисленный диапазон ClosedRange<Int>

Создать массив из диапазона и сопоставить элементы с String

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

Рекомендуется объявлять массивы во множественном числе let numbers

0 голосов
/ 15 июня 2019

Вы можете просто сделать:

let numbers = Array(1...60)

Как это работает?

Вы можете исследовать это самостоятельно.Хитрость заключается в том, чтобы добавить явный вызов init:

Array.init(1...60)

, а затем option - нажмите 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]"
0 голосов
/ 15 июня 2019

Вы создаете массив, поэтому вам нужно иметь квадратные скобки вокруг диапазона.

let numbers = [1...60]
...