Skip to content

Instantly share code, notes, and snippets.

@mactkg
Last active June 2, 2017 07:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mactkg/5f112d2cafd87f9216ae96fb7a21fcd5 to your computer and use it in GitHub Desktop.
Save mactkg/5f112d2cafd87f9216ae96fb7a21fcd5 to your computer and use it in GitHub Desktop.
protocol Tappable {
func getName() -> String
}
class BaseViewCell {
init() {
print("Init viewCell")
}
func boom() {
}
}
protocol AwesomeViewCellDelegate: class {
func tapEvent(viewCell: AwesomeViewCell)
}
class AwesomeViewCell : BaseViewCell, Tappable {
weak var delegate: AwesomeViewCellDelegate?
func getName() -> String {
return "AwesomeViewCell"
}
override func boom() {
delegate?.tapEvent(viewCell: self)
}
}
protocol GreatViewCellDelegate: class {
func tapEvent(viewCell: GreatViewCell)
}
class GreatViewCell : BaseViewCell, Tappable {
weak var delegate: GreatViewCellDelegate?
func getName() -> String {
return "GreatViewCell"
}
override func boom() {
delegate?.tapEvent(viewCell: self)
}
}
class Main {
var cells: [BaseViewCell] = []
init() {
print("init Main")
registerCell()
cells.forEach { (cell) in
cell.boom()
}
}
func registerCell() {
let aCell = AwesomeViewCell()
aCell.delegate = self
cells.append(aCell)
let gCell = GreatViewCell()
gCell.delegate = self
cells.append(gCell)
}
// all delegated events are gathered this func.
func tapped(viewCell: Tappable) {
print("Tapped: \(viewCell.getName())")
}
}
extension Main: AwesomeViewCellDelegate {
func tapEvent(viewCell: AwesomeViewCell) {
tapped(viewCell: viewCell)
}
}
extension Main: GreatViewCellDelegate {
func tapEvent(viewCell: GreatViewCell) {
tapped(viewCell: viewCell)
}
}
Main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment