У меня есть три разных типа пользовательских UITableCells. У меня есть оператор if, который их устанавливает:Как я могу использовать оператор if для установки типа переменной для определенного типа пользовательского tableCell?
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if somePosts[indexPath.row].typeOfPost == .linkPost {
let cell: LinkTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "linkTableViewCell") as! LinkTableViewCell
} else if somePosts[indexPath.row].typeOfPost == .picturePost {
let cell: PictureTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "pictureTableViewCell") as! PictureTableViewCell
} else if somePosts[indexPath.row].typeOfPost == .textPost {
let cell: TextTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "textTableViewCell") as! TextTableViewCell
} else {
print("Type of post is not link, picture, or text")
}
}
Каждая из пользовательских ячеек имеет похожие метки, такие как название и время. Я хотел бы установить эти метки, используя ту же строку коды, такие как:
cell.titleLabel.text = "Some title here"
Однако, в этом примере, я получаю ошибку говоря, я использую неразрешенный идентификатор «ячейку», очевидно, потому, что мои переменные объявляется не глобально. Есть ли способ обойти это, так как swift строго типизирован? Благодаря!
Не связанное, но получение типа три раза из массива источников данных неоправданно дорого. Вы должны использовать оператор switch 'switch somePosts [indexPath.row] .typeOfPost {case .linkPost ...' – vadian
Спасибо, это полезно. Я довольно новичок в этом, поэтому любые советы всегда приветствуются. – SomeGuy
Здесь много повторяющегося кода. Прекратите безумие. – Alexander