#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]
тип