From 3b8d36a6434bdcdf70d289184005c9f416c86589 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Tue, 9 Oct 2018 11:16:24 +0100 Subject: [PATCH] Added Closure = Unique typealias, trying StackView --- Example/Gluon/ViewController.swift | 23 +++++++++-------------- Gluon/Classes/Classes.swift | 4 +++- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Example/Gluon/ViewController.swift b/Example/Gluon/ViewController.swift index f0457a8d..243adf7f 100644 --- a/Example/Gluon/ViewController.swift +++ b/Example/Gluon/ViewController.swift @@ -14,31 +14,26 @@ final class Counter: Component { var counter = 0 } - func onPress() { - setState { $0.counter += 1 } - } - - lazy var onPressHandler = { Unique { self.onPress() } }() + lazy var onPress = { Closure { + self.setState { $0.counter += 1 } + }}() func render() -> Node { - return View.node { - [Button.node(.init(onPress: onPressHandler)) { "Press me" }, + return StackView.node { + [Button.node(.init(onPress: onPress)) { "Increment" }, Label.node { Node("\(state.counter)") }] } } } - -class ViewController: UIViewController { +final class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - - render(node: Counter.node(), container: view) } - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. + @IBAction func onTap(_ sender: Any) { + let counters = (0..<1_000_000).map { _ in Counter(props: NoProps(), children: []) } + print("\(counters.count) new components created") } } diff --git a/Gluon/Classes/Classes.swift b/Gluon/Classes/Classes.swift index 1ac05dcb..1ad4c985 100644 --- a/Gluon/Classes/Classes.swift +++ b/Gluon/Classes/Classes.swift @@ -11,6 +11,8 @@ public protocol Default { init() } +public typealias Closure = Unique + public struct Unique: Equatable { private let uuid = UUID() private let boxed: T @@ -91,7 +93,7 @@ extension Node { } } -public final class View: BaseComponent { +public final class StackView: BaseComponent { } public final class Label: BaseComponent {