Табличное представление: не может индексировать значение типа '[String]' с индексом типа '[String]' - PullRequest
0 голосов
/ 08 мая 2018

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

var indexArray = ["0","5","10","15","20"]
var textArray = ["Tom","Teddy","Mark","John","Samuel","Smith","Chris","Paulo","Simon","Ralf","Mizo","Karim","Lady","Coloy","Samantha","Maro","Kathren","Lyla","Jessika","Amanda",]

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    indexArray.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.textLabel?.text = textArray[indexArray[indexPath.row]]// here is an error Table View: Cannot subscript a value of type '[String]' with an index of type '[String]' 

    return cell
}

Для более подробного объяснения, вместо использования indexPath.row в качестве индекса типа (0, 1, 2, 3) для textArray.

Я хочу использовать индексы (0, 5, 10, 15, 20) из indexArray в качестве индексов textArray.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Попробуйте это:

cell.textLabel?.text = textArray[Int(indexArray[indexPath.row])]

Ваш indexArray является массивом строкового типа (целых) значений, поэтому indexArray[indexPath.row] возвращает строковое значение.

Теперь индекс массива всегда ожидает целое число в качестве индекса, указывающего на элемент в массиве. Поэтому вам нужно преобразовать результат (строковое значение) indexArray[indexPath.row] из строки в целое число.

Более подробное объяснение на примере примера:

если ваш indexPath.row равен 0, тогда:

let stringIndex: String = indexArray[indexPath.row] // "0"
let integerIndex = Int(stringIndex) // 0
let textArrayElement: String = textArray[integerIndex]

print("textArrayElement - \(textArrayElement)") // "Tom"

если ваш indexPath.row равен 1, тогда:

let stringIndex: String = indexArray[indexPath.row] // "5"
let integerIndex = Int(stringIndex) // 5
let textArrayElement: String = textArray[integerIndex]

print("textArrayElement - \(textArrayElement)") // "Smith"
0 голосов
/ 08 мая 2018

Пожалуйста, обновите ниже строки,

cell.textLabel?.text = textArray[Int(indexArray[indexPath.row])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...