Add default container implementation for widgets
This commit is contained in:
parent
6ade5ffa0d
commit
17718471e9
@ -176,6 +176,21 @@ public enum UpdateStrategy {
|
|||||||
|
|
||||||
extension Widget {
|
extension Widget {
|
||||||
|
|
||||||
|
/// The view storage.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - data: Modify views before being updated.
|
||||||
|
/// - type: The view render data type.
|
||||||
|
/// - Returns: The view storage.
|
||||||
|
public func container<Data>(
|
||||||
|
data: WidgetData,
|
||||||
|
type: Data.Type
|
||||||
|
) -> ViewStorage where Data: ViewRenderData {
|
||||||
|
let storage = ViewStorage(initializeWidget())
|
||||||
|
initProperties(storage, data: data, type: type)
|
||||||
|
update(storage, data: data, updateProperties: true, type: type)
|
||||||
|
return storage
|
||||||
|
}
|
||||||
|
|
||||||
/// Update the stored content.
|
/// Update the stored content.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - storage: The storage to update.
|
/// - storage: The storage to update.
|
||||||
|
|||||||
@ -34,6 +34,13 @@ public protocol Widget: AnyView {
|
|||||||
type: Data.Type
|
type: Data.Type
|
||||||
) where Data: ViewRenderData
|
) where Data: ViewRenderData
|
||||||
|
|
||||||
|
/// Get the widget.
|
||||||
|
/// - Returns: The widget.
|
||||||
|
///
|
||||||
|
/// Define this function only if you do not define ``Widget/container(data:type:)``.
|
||||||
|
/// Otherwise, it will not have an effect.
|
||||||
|
func initializeWidget() -> Any
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extend the widget type.
|
/// Extend the widget type.
|
||||||
@ -42,4 +49,11 @@ extension Widget {
|
|||||||
/// A widget's view is empty.
|
/// A widget's view is empty.
|
||||||
public var viewContent: Body { [] }
|
public var viewContent: Body { [] }
|
||||||
|
|
||||||
|
/// Print a warning if the widget does not set this function but it gets accessed.
|
||||||
|
/// - Returns: A dummy pointer.
|
||||||
|
public func initializeWidget() -> Any {
|
||||||
|
print("Warning: Define initialize widget function or container function for \(Self.self)")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user