Make dummy either view a convenience widget

This commit is contained in:
david-swift 2024-08-30 06:38:49 +02:00
parent 4e205397ca
commit 5b2c68aaf7
16 changed files with 27 additions and 1 deletions

View File

@ -112,6 +112,7 @@ public struct Binding<Value> {
} }
/// Extend bindings.
extension Binding where Value: MutableCollection { extension Binding where Value: MutableCollection {
/// Get a child at a certain index of the array as a binding. /// Get a child at a certain index of the array as a binding.
@ -134,6 +135,7 @@ extension Binding where Value: MutableCollection {
} }
/// Extend bindings.
extension Binding where Value: MutableCollection, Value.Element: Identifiable { extension Binding where Value: MutableCollection, Value.Element: Identifiable {
/// Get a child of the array with a certain id as a binding. /// Get a child of the array with a certain id as a binding.
@ -147,6 +149,7 @@ extension Binding where Value: MutableCollection, Value.Element: Identifiable {
} }
/// Extend bindings.
extension Binding: CustomStringConvertible where Value: CustomStringConvertible { extension Binding: CustomStringConvertible where Value: CustomStringConvertible {
/// A textual description of the wrapped value. /// A textual description of the wrapped value.

View File

@ -67,6 +67,7 @@ public struct ModelData {
} }
/// Extend the model.
extension Model { extension Model {
/// Get the value as a binding using the `$` prefix. /// Get the value as a binding using the `$` prefix.

View File

@ -7,6 +7,7 @@
import Foundation import Foundation
/// Extend arrays.
extension Array: AnyView where Element == AnyView { extension Array: AnyView where Element == AnyView {
/// The array's view body is the array itself. /// The array's view body is the array itself.
@ -69,6 +70,7 @@ extension Array: AnyView where Element == AnyView {
} }
/// Extend arrays.
extension Array { extension Array {
/// Accesses the element at the specified position safely. /// Accesses the element at the specified position safely.
@ -96,6 +98,7 @@ extension Array {
} }
/// Extend arrays.
extension Array where Element: Identifiable { extension Array where Element: Identifiable {
/// Accesses the element with a certain id safely. /// Accesses the element with a certain id safely.

View File

@ -5,6 +5,7 @@
// Created by david-swift on 09.06.24. // Created by david-swift on 09.06.24.
// //
/// Extend strings.
extension String { extension String {
/// An identifier for main content in a view storage. /// An identifier for main content in a view storage.

View File

@ -40,6 +40,7 @@ public protocol App {
} }
/// Extend the app.
extension App { extension App {
/// The application's entry point. /// The application's entry point.
@ -91,6 +92,8 @@ extension App {
return appInstance return appInstance
} }
/// Get the state from the properties.
/// - Returns: The state.
func getState() -> [String: StateProtocol] { func getState() -> [String: StateProtocol] {
var state: [String: StateProtocol] = [:] var state: [String: StateProtocol] = [:]
for property in Mirror(reflecting: self).children { for property in Mirror(reflecting: self).children {

View File

@ -27,6 +27,7 @@ public protocol AppStorage: AnyObject {
} }
/// Extend the app storage.
extension AppStorage { extension AppStorage {
/// Focus the scene element with a certain id (if supported). Create the element if it doesn't already exist. /// Focus the scene element with a certain id (if supported). Create the element if it doesn't already exist.

View File

@ -13,8 +13,12 @@ public protocol AnyView {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Get the view with modifications applied.
/// - Parameters:
/// - data:
func getModified<Data>(data: WidgetData, type: Data.Type) -> AnyView where Data: ViewRenderData { func getModified<Data>(data: WidgetData, type: Data.Type) -> AnyView where Data: ViewRenderData {
var modified: AnyView = self var modified: AnyView = self
for modifier in data.modifiers { for modifier in data.modifiers {

View File

@ -27,6 +27,7 @@ public protocol SimpleView: AnyView {
} }
/// Extend the simple view type without state.
extension SimpleView { extension SimpleView {
/// The view's content. /// The view's content.

View File

@ -27,6 +27,7 @@ public protocol View: AnyView {
} }
/// Extend the view type with state.
extension View { extension View {
/// The view's content. /// The view's content.
@ -34,6 +35,8 @@ extension View {
[StateWrapper(content: { view }, state: getState())] [StateWrapper(content: { view }, state: getState())]
} }
/// Get the state from the properties.
/// - Returns: The state.
func getState() -> [String: StateProtocol] { func getState() -> [String: StateProtocol] {
var state: [String: StateProtocol] = [:] var state: [String: StateProtocol] = [:]
for property in Mirror(reflecting: self).children { for property in Mirror(reflecting: self).children {

View File

@ -36,6 +36,7 @@ public protocol Widget: AnyView {
} }
/// Extend the widget type.
extension Widget { extension Widget {
/// A widget's view is empty. /// A widget's view is empty.

View File

@ -44,6 +44,7 @@ struct AppearObserver: ConvenienceWidget {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Run a function on the widget when it appears for the first time. /// Run a function on the widget when it appears for the first time.

View File

@ -58,6 +58,7 @@ struct ContentModifier<Content>: ConvenienceWidget where Content: AnyView {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Replace every occurrence of a certain view type in the content. /// Replace every occurrence of a certain view type in the content.

View File

@ -6,7 +6,7 @@
// //
/// A dummy either view. This will be replaced by the platform-specific either view. /// A dummy either view. This will be replaced by the platform-specific either view.
struct DummyEitherView: Widget { struct DummyEitherView: ConvenienceWidget {
/// Whether to present the first view. /// Whether to present the first view.
var condition: Bool var condition: Bool

View File

@ -45,6 +45,7 @@ struct Freeze: ConvenienceWidget {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Prevent a view from being updated. /// Prevent a view from being updated.

View File

@ -45,6 +45,7 @@ struct InspectorWrapper: ConvenienceWidget {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Run a custom code accessing the view's storage when initializing and updating the view. /// Run a custom code accessing the view's storage when initializing and updating the view.

View File

@ -40,6 +40,7 @@ struct ModifierStopper: ConvenienceWidget {
} }
/// Extend any view.
extension AnyView { extension AnyView {
/// Remove all of the content data for the wrapped views. /// Remove all of the content data for the wrapped views.