Hello folks! Recently I've discovered UIViewInvalidating protocol in UIKIt, and wanted to extend it like that:
protocol RenderableView { associatedtype P: Hashable var props: P { get } func render() } extension UIView.Invalidations { struct Render<View: RenderableView>: UIViewInvalidating { func invalidate(view: UIView) { guard let renderable = view as? View else { return } renderable.render() } } } It works fine, but unfortunately, it seems to be obscured to compile protocol extension as it requires to specify generic
// Reference to generic type 'UIView.Invalidations.Render' requires arguments in <...> extension UIViewInvalidating where Self == UIView.Invalidations.Render { static var render: Render { .init() } } Is it possible to achieve something like this?
class ExampleView: UIView, RenderableView { // Currently it is UIView.Invalidations.Render<ExampleView>() // instead of .render @Invalidating(.render, .layout) var props: Props = .empty private let label = UILabel() func render() { label.attributedText = NSAttributedString(string: props.text) } struct Props: Hashable { let text: String static let empty = Props(text: "") } }