Remove unused code, fix TupleView initializers
This commit is contained in:
parent
e1fb4f7c32
commit
1378151316
|
@ -38,21 +38,3 @@ typealias Updater<T> = (inout T) -> ()
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension Hooks {
|
||||
/** Allows a component to have its own state and to be updated when the state
|
||||
changes. Returns a very simple state container, which on initial call of
|
||||
render contains `initial` as a value and values passed to `count.set`
|
||||
on subsequent updates:
|
||||
*/
|
||||
public func state<T>(_ initial: T) -> Binding<T> {
|
||||
let (get, index) = currentState(initial)
|
||||
|
||||
let queueState = self.queueState
|
||||
return Binding(get: get, set: { newValue in
|
||||
queueState(index) {
|
||||
$0 = newValue
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
//
|
||||
// Hooks.swift
|
||||
// Tokamak
|
||||
//
|
||||
// Created by Max Desiatov on 06/11/2018.
|
||||
//
|
||||
|
||||
typealias Finalizer = (() -> ())?
|
||||
typealias Effect = () -> Finalizer
|
||||
|
||||
protocol HookedComponent: AnyObject {
|
||||
/// State cells of this component indexed by order of `hooks.state` calls
|
||||
var state: [Any] { get set }
|
||||
}
|
||||
|
||||
/** Functions implemented directly in this class are parts of internal
|
||||
implementation of `Hooks`. The public API is defined in extensions of `Hooks`
|
||||
located in separate files in the same directory.
|
||||
*/
|
||||
public final class Hooks {
|
||||
/** Closure assigned by the reconciler before every `render` call. Queues
|
||||
a state update with this reconciler.
|
||||
*/
|
||||
let queueState: (
|
||||
_ index: Int,
|
||||
_ updater: (inout Any) -> ()
|
||||
) -> ()
|
||||
|
||||
weak var component: HookedComponent?
|
||||
|
||||
private var stateIndex = 0
|
||||
|
||||
init(
|
||||
component: HookedComponent,
|
||||
queueState: @escaping (
|
||||
_ index: Int,
|
||||
_ updater: (inout Any) -> ()
|
||||
) -> ()
|
||||
) {
|
||||
self.component = component
|
||||
self.queueState = queueState
|
||||
}
|
||||
|
||||
/** For a given initial state return a current value of this state
|
||||
(initialized from `initial` if current was absent) and its index.
|
||||
*/
|
||||
func currentState<T>(_ initial: T) -> (getter: () -> T, index: Int) {
|
||||
defer { stateIndex += 1 }
|
||||
|
||||
guard let component = component else {
|
||||
fatalError("hooks.state should only be called within `render`")
|
||||
}
|
||||
|
||||
if component.state.count <= stateIndex {
|
||||
component.state.append(initial)
|
||||
}
|
||||
|
||||
let boundIndex = stateIndex
|
||||
// swiftlint:disable:next force_cast
|
||||
return ({ component.state[boundIndex] as! T }, stateIndex)
|
||||
}
|
||||
}
|
|
@ -8,8 +8,7 @@
|
|||
import Dispatch
|
||||
import Runtime
|
||||
|
||||
final class MountedCompositeComponent<R: Renderer>: MountedComponent<R>,
|
||||
HookedComponent, Hashable {
|
||||
final class MountedCompositeComponent<R: Renderer>: MountedComponent<R>, Hashable {
|
||||
static func ==(lhs: MountedCompositeComponent<R>,
|
||||
rhs: MountedCompositeComponent<R>) -> Bool {
|
||||
lhs === rhs
|
||||
|
|
|
@ -16,6 +16,48 @@ public struct TupleView<T>: View {
|
|||
value = (v1, v2)
|
||||
children = [AnyView(v1), AnyView(v2)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View>(_ v1: T1, _ v2: T2, _ v3: T3) where T == (T1, T2, T3) {
|
||||
value = (v1, v2, v3)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3)]
|
||||
}
|
||||
|
||||
// swiftlint:disable line_length
|
||||
// swiftlint:disable large_tuple
|
||||
init<T1: View, T2: View, T3: View, T4: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4) where T == (T1, T2, T3, T4) {
|
||||
value = (v1, v2, v3, v4)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5) where T == (T1, T2, T3, T4, T5) {
|
||||
value = (v1, v2, v3, v4, v5)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6) where T == (T1, T2, T3, T4, T5, T6) {
|
||||
value = (v1, v2, v3, v4, v5, v6)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7) where T == (T1, T2, T3, T4, T5, T6, T7) {
|
||||
value = (v1, v2, v3, v4, v5, v6, v7)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8) where T == (T1, T2, T3, T4, T5, T6, T7, T8) {
|
||||
value = (v1, v2, v3, v4, v5, v6, v7, v8)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View, T9: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8, _ v9: T9) where T == (T1, T2, T3, T4, T5, T6, T7, T8, T9) {
|
||||
value = (v1, v2, v3, v4, v5, v6, v7, v8, v9)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8), AnyView(v9)]
|
||||
}
|
||||
|
||||
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View, T9: View, T10: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8, _ v9: T9, _ v10: T10) where T == (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) {
|
||||
value = (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10)
|
||||
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8), AnyView(v9), AnyView(v10)]
|
||||
}
|
||||
}
|
||||
|
||||
extension TupleView: GroupView {}
|
||||
|
|
|
@ -51,48 +51,48 @@ extension ViewBuilder {
|
|||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2>(_ c0: C0, _ c1: C1, _ c2: C2) -> TupleView<(C0, C1, C2)> where C0: View, C1: View, C2: View {
|
||||
TupleView((c0, c1, c2))
|
||||
TupleView(c0, c1, c2)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3) -> TupleView<(C0, C1, C2, C3)> where C0: View, C1: View, C2: View, C3: View {
|
||||
TupleView((c0, c1, c2, c3))
|
||||
TupleView(c0, c1, c2, c3)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4) -> TupleView<(C0, C1, C2, C3, C4)> where C0: View, C1: View, C2: View, C3: View, C4: View {
|
||||
TupleView((c0, c1, c2, c3, c4))
|
||||
TupleView(c0, c1, c2, c3, c4)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4, C5>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5) -> TupleView<(C0, C1, C2, C3, C4, C5)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View {
|
||||
TupleView((c0, c1, c2, c3, c4, c5))
|
||||
TupleView(c0, c1, c2, c3, c4, c5)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6) -> TupleView<(C0, C1, C2, C3, C4, C5, C6)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View {
|
||||
TupleView((c0, c1, c2, c3, c4, c5, c6))
|
||||
TupleView(c0, c1, c2, c3, c4, c5, c6)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View {
|
||||
TupleView((c0, c1, c2, c3, c4, c5, c6, c7))
|
||||
TupleView(c0, c1, c2, c3, c4, c5, c6, c7)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View {
|
||||
TupleView((c0, c1, c2, c3, c4, c5, c6, c7, c8))
|
||||
TupleView(c0, c1, c2, c3, c4, c5, c6, c7, c8)
|
||||
}
|
||||
}
|
||||
|
||||
extension ViewBuilder {
|
||||
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8, _ c9: C9) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View, C9: View {
|
||||
TupleView((c0, c1, c2, c3, c4, c5, c6, c7, c8, c9))
|
||||
TupleView(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue