@@ -7,46 +7,43 @@ import SafariServices
77#endif
88
99#if os(iOS)
10- typealias ConcreteViewController = UIViewController
11- typealias ViewController = UIViewController
12- typealias ViewControllerRepresentable = UIViewControllerRepresentable
10+ typealias ViewType = UIView
11+ typealias ViewRepresentableType = UIViewRepresentable
1312#elseif os(macOS)
14- typealias ConcreteViewController = NSTabViewController
15- typealias ViewController = NSViewController
16- typealias ViewControllerRepresentable = NSViewControllerRepresentable
13+ typealias ViewType = NSView
14+ typealias ViewRepresentableType = NSViewRepresentable
1715#elseif os(watchOS)
1816// Use `WKInterfaceInlineMovie` as a concrete interface objct type,
1917// since there is no public initializer for `WKInterfaceObject`.
20- typealias ConcreteViewController = WKInterfaceInlineMovie
21- typealias ViewController = WKInterfaceObject
22- typealias ViewControllerRepresentable = WKInterfaceObjectRepresentable
18+ typealias ViewType = WKInterfaceInlineMovie
19+ typealias ViewRepresentableType = WKInterfaceObjectRepresentable
2320#endif
2421
25- struct WebAuthenticationPresenter < Item: Identifiable > : ViewControllerRepresentable {
22+ struct WebAuthenticationPresenter < Item: Identifiable > : ViewRepresentableType {
2623
2724 // MARK: Representation
2825
2926 @Binding var item : Item ?
3027 var representationBuilder : ( Item ) -> WebAuthenticationSession
3128
32- // MARK: ViewControllerRepresentable
29+ // MARK: ViewRepresentable
3330
3431 func makeCoordinator( ) -> Coordinator {
3532 return Coordinator ( parent: self )
3633 }
3734
3835 #if os(iOS)
3936
40- func makeUIViewController ( context: Context ) -> ViewController {
41- return makeViewController ( context: context)
37+ func makeUIView ( context: Context ) -> ViewType {
38+ return makeView ( context: context)
4239 }
4340
44- func updateUIViewController ( _ uiViewController : ViewController , context: Context ) {
41+ func updateUIView ( _ uiView : ViewType , context: Context ) {
4542
46- updateViewController ( uiViewController , context: context)
43+ updateView ( uiView , context: context)
4744
4845 // To set a delegate for the presentation controller of an `SFAuthenticationViewController` as soon as possible,
49- // check the view controller presented by `uiViewController ` then set it as a delegate on every view updates.
46+ // check the view controller presented by `view.viewController ` then set it as a delegate on every view updates.
5047 // INFO: `SFAuthenticationViewController` is a private subclass of `SFSafariViewController`.
5148 guard #available( iOS 14 . 0 , * ) else {
5249 context. coordinator. setInteractiveDismissalDelegateIfPossible ( )
@@ -56,31 +53,31 @@ struct WebAuthenticationPresenter<Item: Identifiable>: ViewControllerRepresentab
5653
5754 #elseif os(macOS)
5855
59- func makeNSViewController ( context: Context ) -> ViewController {
60- return makeViewController ( context: context)
56+ func makeNSView ( context: Context ) -> ViewType {
57+ return makeView ( context: context)
6158 }
6259
63- func updateNSViewController ( _ nsViewController : ViewController , context: Context ) {
64- updateViewController ( nsViewController , context: context)
60+ func updateNSView ( _ nsView : ViewType , context: Context ) {
61+ updateView ( nsView , context: context)
6562 }
6663
6764 #elseif os(watchOS)
6865
69- func makeWKInterfaceObject( context: Context ) -> ViewController {
70- return makeViewController ( context: context)
66+ func makeWKInterfaceObject( context: Context ) -> ViewType {
67+ return makeView ( context: context)
7168 }
7269
73- func updateWKInterfaceObject( _ wkInterfaceObject: ViewController , context: Context ) {
74- updateViewController ( wkInterfaceObject, context: context)
70+ func updateWKInterfaceObject( _ wkInterfaceObject: ViewType , context: Context ) {
71+ updateView ( wkInterfaceObject, context: context)
7572 }
7673
7774 #endif
7875
79- private func makeViewController ( context: Context ) -> ViewController {
80- return context. coordinator. viewController
76+ private func makeView ( context: Context ) -> ViewType {
77+ return context. coordinator. view
8178 }
8279
83- private func updateViewController ( _ viewController : ViewController , context: Context ) {
80+ private func updateView ( _ view : ViewType , context: Context ) {
8481 // Keep the coordinator updated with a new presenter struct.
8582 context. coordinator. parent = self
8683 context. coordinator. item = item
@@ -101,8 +98,8 @@ extension WebAuthenticationPresenter {
10198
10299 // MARK: View Controller Holding
103100
104- let viewController = ConcreteViewController ( )
105- private var session : ASWebAuthenticationSession ?
101+ let view = ViewType ( )
102+ private weak var session : ASWebAuthenticationSession ?
106103
107104 // MARK: Item Handling
108105
@@ -146,13 +143,13 @@ extension WebAuthenticationPresenter {
146143
147144 representation. applyModification ( to: session)
148145
149- self . session = session
150146 session. start ( )
147+
148+ self . session = session
151149 }
152150
153151 private func cancelWebAuthenticationSession( ) {
154152 session? . cancel ( )
155- session = nil
156153 }
157154
158155 // MARK: Dismissal Handlers
@@ -173,7 +170,7 @@ extension WebAuthenticationPresenter {
173170
174171 class PresentationContextProvider : NSObject , ASWebAuthenticationPresentationContextProviding {
175172
176- weak var coordinator : WebAuthenticationPresenter . Coordinator ?
173+ unowned var coordinator : WebAuthenticationPresenter . Coordinator
177174
178175 init ( coordinator: WebAuthenticationPresenter . Coordinator ) {
179176 self . coordinator = coordinator
@@ -182,7 +179,7 @@ extension WebAuthenticationPresenter {
182179 // MARK: ASWebAuthenticationPresentationContextProviding
183180
184181 func presentationAnchor( for session: ASWebAuthenticationSession ) -> ASPresentationAnchor {
185- return coordinator! . viewController . view. window!
182+ return coordinator. view. window!
186183 }
187184 }
188185
@@ -202,7 +199,7 @@ extension WebAuthenticationPresenter {
202199
203200 @available ( iOS, introduced: 13.0 , deprecated: 14.0 )
204201 func setInteractiveDismissalDelegateIfPossible( ) {
205- guard let safariViewController = viewController. presentedViewController as? SFSafariViewController else {
202+ guard let safariViewController = view . viewController? . presentedViewController as? SFSafariViewController else {
206203 return
207204 }
208205 safariViewController. presentationController? . delegate = interactiveDismissalDelegate
0 commit comments