Last active
June 2, 2017 07:08
-
-
Save mactkg/5f112d2cafd87f9216ae96fb7a21fcd5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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