diff --git a/Sources/SwiftWebUI/Views/View.swift b/Sources/SwiftWebUI/Views/View.swift index 737c68d..1d66f2d 100644 --- a/Sources/SwiftWebUI/Views/View.swift +++ b/Sources/SwiftWebUI/Views/View.swift @@ -13,3 +13,10 @@ public protocol View { var body : Self.Body { get } } + +//support for optional Views, mainly for @ViewBuilder convenience +extension Optional : View where Wrapped : View { + public var body: EmptyView { + EmptyView() + } +} diff --git a/Sources/SwiftWebUI/Views/ViewBuilder.swift b/Sources/SwiftWebUI/Views/ViewBuilder.swift index 57e6888..7ba1561 100644 --- a/Sources/SwiftWebUI/Views/ViewBuilder.swift +++ b/Sources/SwiftWebUI/Views/ViewBuilder.swift @@ -19,9 +19,7 @@ public extension ViewBuilder { - static func buildIf(_ content: V) -> V { return content } - //static func buildIf(_ content: V?) -> V? { return content } - // This one still doesn't work! + static func buildIf(_ content: V?) -> V? { return content } static func buildEither(first: T) -> ConditionalContent diff --git a/Sources/SwiftWebUI/VirtualDOM/Components/ComponentReflection.swift b/Sources/SwiftWebUI/VirtualDOM/Components/ComponentReflection.swift index a07e337..c502211 100644 --- a/Sources/SwiftWebUI/VirtualDOM/Components/ComponentReflection.swift +++ b/Sources/SwiftWebUI/VirtualDOM/Components/ComponentReflection.swift @@ -128,6 +128,10 @@ extension ComponentTypeInfo { return nil } guard structInfo.kind == .struct else { + if structInfo.kind == .optional { + self = .static + return + } print("Only structs allowed as View:", viewType) assertionFailure("currently only supporting structs for Views") return nil