Я пытаюсь заполнить данные в ячейки внутри табличного представления. Я создал переменную selectedPlanData, которая инициализируется объектом с данными внутри нее. У объекта есть такие свойства, как «имя» и «местоположение события». Проблема возникает, когда внутри cellForRowAt. Это не позволяет мне добавить [indexPath.row] в создаваемую ячейку, что, в свою очередь, не заполняет ячейки правильно.
Например - я удалил indexPath.row из первого вызова cell.nameLbl.text - и, в свою очередь, каждая метка имени в представлении таблицы была одинаковой. вот кусок кода
var chosenPlanData = ChosenPlan()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "individualPlansCell") as? PlanitsHomeViewCell else { return UITableViewCell() }
cell.nameLbl.text = chosenPlanData.nameOfEvent[indexPath.row] // error Cannot assign value of type 'Character' to type 'String?'
cell.dateAndTimeLbl.text = chosenPlanData.eventStartsAt[indexPath.row] as? String // error 'subscript' is unavailable: cannot subscript String with an Int, see the documentation comment for discussion
cell.nameLbl.text = chosenPlanData.nameOfEvent // This works - but every single cell has the same nameLbl though
return cell
}
// Here is the call back where i initialize the value for chosenPlanData
let EventbriteTVC = segue.destination as! EventbriteTableView
EventbriteTVC.callbackChosePlan = { result in
DispatchQueue.main.async {
self.individualPlanitsTableView.reloadData()
}
self.chosenPlanData = result
}
импортный фундамент импортировать UIKit
class ChosenPlan {
var nameOfEvent : String = ""
var eventStartsAt : String = ""
var eventLocationIs : String = ""
var eventURL : String = ""
var imageForPlan : String?
convenience init( eventName: String, eventTime: String, eventLocation: String, eventImage: String){
self.init()
self.nameOfEvent = eventName
self.eventStartsAt = eventTime
self.eventLocationIs = eventLocation
//self.eventURL = eventLink
self.imageForPlan = eventImage
//eventLink: String,
}
}
вам нужно преобразовать ваш selectedPlanData.nameOfEvent [indexPath.row] из символа в String, вот и все
@Khushbu только что обновил вопрос. Благодарность
@ReinierMelian, это не позволит мне сделать это .. как именно ты предлагаешь мне это сделать?
nameOfEvent - это String, а chosenPlanData.nameOfEvent[indexPath.row] - вы рассматриваете его как массив, как это работает?
@dahiya_boy, потому что это будет представлено в виде таблицы. имя события - это параметр в созданном мной объекте.
@Coding whileLoading Прочтите мой ответ, вы будете более понятны,
Непонятно, как вы хотите заполнить tableView? Здесь у вас есть единый ChosenPlan, который вы используете для всех ячеек! Итак, вам, вероятно, понадобится массив ChosenPlan, как описано в другом месте. Вы можете создать и заполнить этот массив.





если
var chosenPlanData = [ChosenPlan]()
Попробуй это:-
cell.nameLbl.text = "\(chosenPlanData[indexPath.row].nameOfEvent)"
или же
cell.nameLbl.text = "\(chosenPlanData[indexPath.row].nameOfEvent ?? "")"
Это дало мне ошибку - «нижний индекс» недоступен: невозможно добавить в нижний индекс String с помощью Int, см. Комментарий к документации для обсуждения
selectedPlanData [indexPath.row] .nameOfEvent Причина nameOfEvent не является типом массива
Когда я ввожу его таким образом, он говорит - Тип "ChosenPlan" не имеет элементов нижнего индекса.
Ваши selectedPlanData должны быть такими: var selectedPlanData = [ChosenPlan] (), тогда только вы можете использовать indexpath для selectedPlanData
это так, однако, когда я набираю его таким образом, имя меняется каждый раз, когда добавляется новая ячейка. Итак, если сначала в представлении таблицы есть одна ячейка с меткой «Собака», а я добавляю другую ячейку с меткой «Кошка». В итоге у меня есть 2 клетки, но они оба говорят "кот" ... в основном это происходит от предыдущего названия.
Вы создаете объект класса ChosePlan ... если вам нужно сохранить два значения, вам нужно создать массив объекта класса ChosenPlan, например var selectedPlanData = [ChosenPlan] () ... Таким образом, используя indexpath, вы можете получить доступ к значениям dog, cat
Ваша переменная chosenPlanData является единственным экземпляром ChosenPlan - вы не можете использовать индекс для одного экземпляра.
Это должен быть массив ChosenPlan:
var chosenPlanData = [ChosenPlan]()
Затем вы можете индексировать этот массив:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "individualPlansCell") as? PlanitsHomeViewCell else { return UITableViewCell() }
cell.nameLbl.text = chosenPlanData[indexPath.row].nameOfEvent
cell.dateAndTimeLbl.text = chosenPlanData[indexPath.row].eventStartsAt
Я не понял, что OP пытался, пока не узнал, что он изначально ошибался в концепции TableView, ошибка с символами и строками была связана с тем, что он обращался к строке в [indexPath.row], которая является символом lol, +1 для лучшего чтения, чем я
Обработка типов очень важна в Swift. Попробуй это.
cell.nameLbl.text = String(chosenPlanData.nameOfEvent[indexPath.row])
let index = chosenPlanData.eventStartsAt.index(chosenPlanData.eventStartsAt.startIndex, offsetBy: 3)
cell.dateAndTimeLbl.text = String(chosenPlanData.eventStartsAt[index])
расширение моего комментария
var chosenPlanData = ChosenPlan()chosenPlanData является объектом ChosenPlan
cellForRow вы пишете chosenPlanData.nameOfEvent[indexPath.row], но nameOfEvent - это строка в соответствии с вашим ChosenPlan, о котором вы упомянули в вопросе.Для получения дополнительной информации,
chosenPlanData.nameOfEvent[indexPath.row]: эта строка представляет вас с использованием объекта п-е (indexPath.row) из nameOfEvent, который является объектом chosenPlanData.
Надеюсь теперь прояснится.
Solution
var chosenPlanData = [ChosenPlan]() <- создать массив
В cellForRowchosenPlanData[indexPath.row].nameOfEvent это означает, что вы используете nameOfEvent из объекта nth из chosenPlanData.
Вы были правы. Теперь проблема только в том, чтобы убедиться, что количество строк в разделах увеличивается. У меня проблема с индексом вне диапазона, когда я это делаю. но сейчас работаю над этим. Спасибо
Покажите, пожалуйста, свой класс "ChosenPlan".