diff --git a/README.md b/README.md index 29d5742..8c702c4 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,15 @@ public protocol NSUIViewRepresentable { func makeNSUIView(context: Context) -> NSUIViewType func updateNSUIView(_ view: NSUIViewType, context: Context) } + +public protocol NSUIViewControllerRepresentable: UIViewControllerRepresentable { + associatedtype NSUIViewControllerType + + @MainActor + func makeNSUIViewController(context: Context) -> NSUIViewControllerType + @MainActor + func updateNSUIViewController(_ viewController: NSUIViewControllerType, context: Context) +} ``` ## Conventions diff --git a/Sources/NSUI/ViewControllerRepresentable.swift b/Sources/NSUI/ViewControllerRepresentable.swift new file mode 100644 index 0000000..4e33a42 --- /dev/null +++ b/Sources/NSUI/ViewControllerRepresentable.swift @@ -0,0 +1,48 @@ +import SwiftUI + +#if canImport(AppKit) && !targetEnvironment(macCatalyst) +public protocol NSUIViewControllerRepresentable: NSViewControllerRepresentable { + associatedtype NSUIViewControllerType: NSUIViewController + + @MainActor + func makeNSUIViewController(context: Self.Context) -> Self.NSUIViewControllerType + + @MainActor + func updateNSUIViewController(_ viewController: Self.NSUIViewControllerType, context: Self.Context) +} + +public extension NSUIViewControllerRepresentable { + @MainActor + func makeNSViewController(context: Self.Context) -> Self.NSUIViewControllerType { + makeNSUIViewController(context: context) + } + + @MainActor + func updateNSViewController(_ viewController: Self.NSUIViewControllerType, context: Self.Context) { + updateNSUIViewController(viewController, context: context) + } +} +#elseif canImport(UIKit) +public protocol NSUIViewControllerRepresentable: UIViewControllerRepresentable { + associatedtype NSUIViewControllerType: NSUIViewController + + @MainActor + func makeNSUIViewController(context: Self.Context) -> Self.NSUIViewControllerType + + @MainActor + func updateNSUIViewController(_ viewController: Self.NSUIViewControllerType, context: Self.Context) +} + +public extension NSUIViewControllerRepresentable { + @MainActor + func makeUIViewController(context: Self.Context) -> Self.NSUIViewControllerType { + makeNSUIViewController(context: context) + } + + @MainActor + func updateUIViewController(_ viewController: Self.NSUIViewControllerType, context: Self.Context) { + updateNSUIViewController(viewController, context: context) + } +} +#endif +