Как мне присвоить кортеж строк тексту ячейки?

#ios #swift #uitableview

#iOS #swift #uitableview

Вопрос:

Я создаю сгруппированную таблицу, и она показывает эту ошибку:

не удается присвоить значение типа ‘(String, строка)’ типу String.

Я использую Xcode 8.3.3.

 import UIKit

class ViewController: UIViewController, UITableViewDataSource  {
    let people = [
                    ("Purnima Yadav", "New Delhi"), ("Gitesh Yadav", "Toronto"), ("Vidhi Yadav", "Chicago")]
    let videos = [
                    ("Android app Development", "74 videos"), ("C   for Beginners", "87 videos"), ("Java", "142 videos"), ("Python Programming", "63 videos"), ("Web design", "68 videos")
    ]

    //return int , how many rows
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        if section == 0 {
            return people.count
        } else {
            return videos.count
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        if indexPath.section == 0 {
            var (personName, personLocation) = people[indexPath.row]
            cell.textLabel?.text = personName
        } else {
            var (videoTitle, videoDesc) = videos[indexPath.row]

            cell.textLabel?.text = videoTitle
        }
        return cell
    }
}
  

Я получаю сообщение об ошибке при:

 cell.textLabel?.text = personName
  

Комментарии:

1. Зачем вы создаете массивы кортежей? Почему вы приводите их к массиву Any ? Почему первый кортеж videos имеет только одно значение, в то время как остальные имеют два значения?

2. Почему вы проверяете наличие iOS 2.0? Прошло 11 лет с тех пор, как какое-либо устройство использовало iOS 2.0. Вы не должны пытаться поддерживать что-либо меньшее, чем iOS 11, для разработки любого нового приложения. Также обратите внимание, что все новые приложения, поступающие в store, должны быть созданы с использованием Xcode 10.1 или более поздней версии, поэтому вам нужно обновиться раньше, чем позже.

3. это было по ошибке.

4. Теперь я получаю ошибку в cell.textLabel?.text = personName . В нем говорится, что не удается присвоить значение типа ‘(String, Строка)’ типу (String) .

Ответ №1:

Вы можете решить свою проблему, присвоив своему videos объекту определенный тип как [(String, String)] , который является Array of Tuples , и ваше объявление будет выглядеть следующим образом:

 let videos: [(String, String)] = [("Android app Development", ""), ("C   for Beginners", "87 videos"), ("Java", "142 videos"), ("Python Programming", "63 videos"), ("Web design", "68 videos")]
  

Здесь вам также необходимо обновить свой ("Android app Development") с ("Android app Development", "") , чтобы удовлетворить вашему приведению типов.

Комментарии:

1. К вашему сведению — ("Android app Development") это кортеж. Это просто не кортеж из двух значений, как другие.

Ответ №2:

У кортежа ("Android app Development") нет второго набора. Это должно быть ("Android app Development", "") . Также вы преобразовали свой массив кортежей в массив [Any] . Просто удалите его.

Комментарии:

1. это было по ошибке .. и это не [Any] тип