Generic SwiftUI Representables

Sometimes while using SwiftUI, you just want to add a simple UIKit view controller or view. Using the power of generics, we are able to make a generic version of the UIViewControllerRepresentable and UIViewRepresentable.

struct RepresentableViewController<ViewController: UIViewController>: UIViewControllerRepresentable {
    let builder: () -> ViewController

    init(_ builder: @escaping () -> ViewController) {
        self.builder = builder
    }

    func makeUIViewController(context: Context) -> ViewController {
        builder()
    }

    func updateUIViewController(_ uiViewController: ViewController, context: UIViewControllerRepresentableContext<UIViewControllerPreview<ViewController>>) {
        return
    }
}
struct RepresentableView<View: UIView>: UIViewRepresentable {
    let builder: () -> View

    init(_ builder: @escaping () -> View) {
        self.builder = builder
    }

    func makeUIView(context: Context) -> UIView {
        builder()
    }

    func updateUIView(_ view: UIView, context: Context) {
        view.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        view.setContentHuggingPriority(.defaultHigh, for: .vertical)
    }
}