Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //: Playground - noun: a place where people can play
- import UIKit
- protocol MythicalCreatureDisplayable: class {
- associatedtype Conformer = Self
- var displayer: Conformer { get }
- func displayMythicalCreature()
- }
- final class KrakenView: UIView, MythicalCreatureDisplayable {
- func displayMythicalCreature() {
- print("draw a Kraken")
- }
- }
- extension MythicalCreatureDisplayable where Self: UIView {
- var displayer: UIView { return self }
- }
- private extension MythicalCreatureDisplayable {
- func getDisplayer() -> Conformer {
- return displayer
- }
- }
- final class AnyMythicalTypeDisplayable<T>: MythicalCreatureDisplayable {
- var displayer: T { return _getDisplayer() }
- private let _getDisplayer: () -> T
- private let _displayMythicalCreature: () -> Void
- required init<U: MythicalCreatureDisplayable where U.Conformer == T>(_ displayable: U) {
- _getDisplayer = displayable.getDisplayer
- _displayMythicalCreature = displayable.displayMythicalCreature
- }
- func displayMythicalCreature() {
- _displayMythicalCreature()
- }
- }
- let krakenView = KrakenView()
- let regularView = UIView()
- var mythicalDisplayableView: AnyMythicalTypeDisplayable<UIView>
- mythicalDisplayableView = AnyMythicalTypeDisplayable(krakenView)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement