У меня есть несколько UITableViewCell
, которые имеют несколько разных макетов в зависимости от того, являются ли они товарищами по команде, врагами и т. Д. Но я должен относиться к каждому типу по-разному и т. Д. Поэтому я попытался сократить реплицируемый код с помощью используя протокол,
Я создал протокол для UITableViewCell
примерно так:
protocol ViewCellProtocol {
var teamRank: UILabel! { get set }
var ranking: UILabel! { get set }
var rankDelta: UILabel! { get set }
var upDownIndicator: UILabel! { get set }
var textLabel : UILabel? { get }
}
Это мой класс:
import UIKit
class TeamStatsTableViewCell: UITableViewCell {
@IBOutlet weak var teamRank: UILabel!
@IBOutlet weak var ranking: UILabel!
@IBOutlet weak var rankDelta: UILabel!
@IBOutlet weak var upDownIndicator: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Тогда, когда я пытаюсь использовать это
func playerViewCell(_ tableView: UITableView, indexPath: IndexPath) -> ViewCellProtocol {
let cell = tableView.dequeueReusableCell(withIdentifier: "teamNameCell")! as! TeamStatsTableViewCell
let rank = sections[indexPath.section].data[indexPath.row]["rank"] as? Int
let (rating, ratingDelta) = selectRating(section: indexPath.section, row: indexPath.row)
let indicator = decideRatingIndicator(ratingDelta: ratingDelta, cell: cell)
cell.upDownIndicator?.text = "\(indicator)"
cell.teamRank?.text = "#\(rank!)"
cell.ranking?.text = String(rating)
cell.rankDelta.text = String(format: "%.0f", ratingDelta)
cell.textLabel?.text = sections[indexPath.section].data[indexPath.row]["username"] as? String
return cell as! ViewCellProtocol
}
Я получаю сообщение об ошибке:
Не удалось преобразовать значение типа «.TeamStatsTableViewCell» (0x1008d35d8) в «.ViewCellProtocol» (0x10ea37db8).
2018-04-24 22: 00: 27.137516-0600 [434: 72294] Не удалось преобразовать значение типа .TeamStatsTableViewCell (0x1008d35d8) в .ViewCellProtocol (0x10ea37db8).
Хотелось бы, чтобы он сказал мне, к какой части он не соответствует. Какие-либо предложения? Совершенно новый взгляд на protocols
, как interface{}
в Go. Спасибо.