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)
}
}