我有几个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)。
我希望它会告诉我它不符合哪一部分。有什么建议?在Go中快速查看protocols
之类的interface{}
相当新鲜。感谢。
答案 0 :(得分:1)
您的自定义单元格类可能正在实现协议中的所有内容,并且在objC中已经足够了,但是在这里您必须声明您明确地实现了该协议
class TeamStatsTableViewCell: UITableViewCell, ViewCellProtocol {
@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
}
}
答案 1 :(得分:0)
您需要声明TeamStatsTableViewCell
符合ViewCellProtocol
,例如添加此扩展程序:
extension TeamStatsTableViewCell: ViewCellProtocol { }