Protocols
The following protocols are available globally.
-
This is an abstract protocol representing an Interactor object and Interactor objects should not conform to this directly.
See moreImportant
This is an abstract protocol and Interactor objects should not conform to this directly. For Interactors running in a synchronous context where closures will provide operation results, please conform to
Interactable. If you need your Interactor to run as an Actor in an async context, please conform toAsyncInteractable. And if your Interactor needs to represent a datasource for model retrieval, please use theDatasourceableorAsyncDatasourceablebased on the context it should run in.Declaration
Swift
public protocol AbstractInteractable<Request> : AnyObject -
A protocol that represents the configuration for a collection of
Actionobjects, either a group of actions running in parallel, or a sequence of actions running in serial order.Types conforming to this protocol hold multiple
ActionConfiguringchild configurations under one umbrella. Whenperform(with:sequenceOutputs:)is called on anActionPerformableCollectionobject, it runs the child actions. If this object is anActionGroup, the results are then merged by themergerobject into a singleContentTypevalue, which the group’s output conduit passes on to the next step in the sequence, if one exists.
See moreActionGroupConfigurationis the primary concrete conforming type.Declaration
Swift
@MainActor public protocol ActionCollectionConfiguring<InteractorType, ContentType> : ActionConfiguring -
This protocol represents an object that can be used to configure an
See moreActionfor use in anActionPerformableCollectionobject.Declaration
Swift
@MainActor public protocol ActionConfiguring<InteractorType, ContentType> -
This protocol represents a type which can be used to identify an
ActionPerformableobject.Providing a type for steps is optional, but useful when a sequence contains multiple steps whose results share the same content type. For example, two network requests of different API endpoints may return the same model and you need to handle them differently.
Stringconforms to this protocol out of the box, or you can conform your own enum for type-safe lookups.Note
Step types are not required to be unique. Looking up results by type returns all matching results.
Declaration
Swift
public protocol ActionIdentifying : Hashable, Sendable -
A protocol that defines an object which can perform an action as part of an
ActionPerformableCollectionobject. This action generally represents a single Interactor request.Conforming types represent discrete, async steps in a sequence or one of several parallel tasks in a group. Each step receives accumulated outputs from prior steps and returns an updated
See moreActionCollectionResultsobject, enabling a chain of actions to build on each other’s results.Declaration
Swift
@MainActor public protocol ActionPerformable<ContentType> : AnyObject, Sendable -
A protocol that defines a collection of
ActionPerformableobjects that can be run together, such as a sequence or group.Conforming types manage an ordered or grouped set of actions sharing the same
See moreContentType, and are responsible for performing them and accumulating their results into anActionCollectionResultsobject.Declaration
Swift
@MainActor public protocol ActionPerformableCollection<ContentType> : ActionPerformable -
This protocol represents objects that merge the results of an
See moreActionGroup‘s child actions into a single content value which is passed on through the group’s output conduit. This merging step is necessary in order for anActionGroupto participate in the action sequence, as the sequence expects a single ContentType value to be passed from action to action.Declaration
Swift
@MainActor public protocol ActionResultsMerging<ContentType> -
A protocol that defines a conduit between steps in an action sequence.
Conduit objects that conform to this protocol receive the output of the current sequence step action and optionally transform the output into a data form the next action can use the next action in the sequence, before then injecting the output into the next step in the sequence.
See moreDeclaration
Swift
@MainActor public protocol ActionSequenceConduiting<ContentType> -
A narrow, type-erased entry point for assigning an interactor assistant to a Destination.
This exists so callers holding
See moreany InteractorConfiguring<InteractorType>can dispatch the assignment without exposing the configuration’sInteractorassociated type (and theInteractor.Request.ResultData == Destination.ContentTypeconstraint that would otherwise be required at the call site).Declaration
Swift
@MainActor public protocol AssistantAssigning -
This protocol represents a datasource Interactor actor. Datasources are designed to provide data models to a Destination based on requests, such as requesting objects from a server for display in a navigation stack. For more information on Interactors, please see the documentation for
Interactable.See moreNote
If you need your datasource Interactor to run in a synchronous context, please conform it to the
Datasourceableprotocol instead.Declaration
Swift
public protocol AsyncDatasourceable<Item> : AsyncInteractable -
Undocumented
See moreDeclaration
Swift
public protocol AsyncInteractable<Request> : AbstractInteractable, Actor -
This protocol represents an assistant which helps a Destination make requests of an Interactor which participates in async/await flows. Concrete assistants conforming to this protocol should handle requests for a specific Interactor type.
See moreDeclaration
Swift
@MainActor public protocol AsyncInteractorAssisting<InteractorType, ContentType> : InteractorAssisting -
A protocol that defines a condition used to select a branch path in an
ActionBranchstep.When an
ActionBranchruns, it evaluates eachBranchConditionablecondition in order by calling theirevaluate(content:)method and selects the first case whose condition returnstrue. This protocol also provides an implementation ofnegated()so that a the same condition can be used in the inverse sense (i.e. “is online” vs. “is offline”).Implement this protocol to define reusable, named conditions:
See morestruct HasImagesCondition: BranchConditionable { func evaluate(content: AppContent?) -> Bool { guard case .images(let images) = content else { return false } return !images.isEmpty } }Declaration
Swift
@MainActor public protocol BranchConditionable<ContentType> -
A protocol that defines an object capable of transforming a value of one type into a value of another type.
Conforming types receive a value of the associated
Inputtype, apply a transformation to it, and return a value of the associatedOutputtype. The transformation may throw if the input is invalid or the transformation cannot be completed.This protocol serves two roles in an
ActionSequence:- Transforming a sequence step’s output for the next step, via
step(_:inputTransformer:)or anActionBranchConfiguration‘stransformerparameter. In this roleInputandOutputare typically the same type: the transformation changes the value, not the type (e.g. an array of images into an array of file models, both cases of the same content enum). - Converting an Interactor’s raw request result into a sequence step’s
ContentType, viaActionConfiguration’sresultTransformerparameter. This is only needed when an Interactor’sRequest.ResultDatatype differs from the step’sContentType. For example, an API Interactor might define its ownResultDataenum whose cases represent each supported endpoint, and a transformer packages that into theContentTypeused elsewhere in the sequence.
Example: transforming a sequence step’s output
In this example transformer we’re taking an array of images as input and transforming them into an array of models containing the image data and filenames to save them to. Since this transforms a step’s output for use by the next step,
InputandOutputare both inferred asAppContentType.struct ImageFileTransformer: ContentTransformable { func transform(input: AppContentType) throws -> AppContentType { guard case .images(let images) = input else { return input } let timestamp = Int(Date().timeIntervalSince1970) let models: [DataModel] = try images.enumerated().map { index, image in guard let data = image.pngData() else { throw SequenceDemoError.invalidImage } return DataModel(data: data, fileName: "fetched-image-\(timestamp)-\(index).png") } } }Example: converting an Interactor’s result
Here we’re taking a
FilterResultTypevalue returned by an image-filtering Interactor and converting it into theAppContentTypeused throughout the rest of the sequence.ResultData(FilterResultType) andContentType(AppContentType) are inferred as different types.
See morestruct ApplyImageFilterResultTransformer: ContentTransformable { func transform(input: FilterResultType) throws -> AppContentType { switch input { case .filteredImages(let urls): return .savedFiles(urls: urls) } } }Declaration
Swift
@MainActor public protocol ContentTransformable<Input, Output> : Sendable - Transforming a sequence step’s output for the next step, via
-
This protocol represents a delegate object that provides status updates during the retrieval of items by a
See moreDatasourceableobject.Declaration
Swift
public protocol DatasourceItemsProviderStatusDelegate : AnyObject -
This protocol represents a datasource Interactor. Datasources are designed to provide data models to a Destination based on simple data fetches, such as requesting objects from a server for display in a navigation stack. For more information on Interactors, please see the documentation for
Interactable.See moreNote
If you need your datasource Interactor to run in an async context, please instead conform it to the
AsyncDatasourceableprotocol.Declaration
Swift
public protocol Datasourceable<Item> : Interactable -
This protocol represents an object that holds Destination presentation objects.
See moreDeclaration
Swift
public protocol DestinationConfigurationsContaining<EventType, DestinationType, TabType, ContentType> -
This protocol defines methods that an object should implement to receive updates from
See moreDestinationInterfaceCoordinatorobjects.Declaration
Swift
@MainActor public protocol DestinationInterfaceCoordinatorDelegate : AnyObject -
This abstract protocol represents an object that coordinates the presentation of a Destination within a UI framework.
See moreDeclaration
Swift
@MainActor public protocol DestinationInterfaceCoordinating -
A protocol representing a user interface object that is handled by Destinations. This is typically a
See moreViewin SwiftUI or aUIViewControllerin UIKit.Declaration
Swift
@MainActor public protocol DestinationInterfacing<DestinationType, ContentType, TabType> -
This protocol represents classes which the internal state of classes conforming to the
See moreDestinationableprotocol.Declaration
Swift
public protocol DestinationInternalStateable<EventType, DestinationType, TabType, ContentType, InteractorType> -
This protocol represents a Destination navigator path object. It should be implemented to allow for system-level navigation stacks like SwiftUI’s
See moreNavigationStackinto the Destinations ecosystem, which theDestinationNavigatorclass implements.Declaration
Swift
@MainActor public protocol DestinationPathNavigating : AnyObject -
This is an abstract protocol which defines Provider classes which build and provide new Destination objects, including their interface elements. Each Provider should be responsible for building a unique Destination and its associated interface.
See moreNote
Adopt SDK-specific protocols like
ViewDestinationProvidingorControllerDestinationProvidingwhen creating your own provider classes.Declaration
Swift
@MainActor public protocol DestinationProviding -
This protocol represents an interface’s state object which holds a reference to its associated Destination.
See moreDeclaration
Swift
@MainActor public protocol DestinationStateable<Destination, StateModel> : AnyObject -
This protocol represents a Destination in the Destinations ecosystem.
A Destination represents a unique area in an app which can be navigated to by the user. In SwiftUI this is typically a fullscreen
Viewobject, and in UIKit it’s aUIViewControllerclass or subclass, but it can also be a group of Destinations like aTabBaror a carousel. Destinations hold references to the UI element they’re associated with, but they don’t handle the particulars of laying out elements on the screen. Instead, the role of Destination objects in the ecosystem is to send and receive messages and datasource requests on behalf of their UI, such as passing on a message to trigger an action when a user taps a button.In most cases you should be able to use the provided
ViewDestinationorControllerDestinationclasses for SwiftUI or UIKit apps respectively. They are customized to a particular Destination through generic arguments. To handle presentation requests that require specialized configuration or need to handle content models, you can create custom assistants which conform to theInterfaceActionConfiguringprotocol. To handle requests to an interactor, you can create assistants which conform to theInteractorAssistingprotocol. There are more specific classes to support interfaces like TabBars, but you can also use your own Destination classes by conforming toViewDestinationableorControllerDestinationableif you should need custom functionality or just want to avoid using generics.There is a two-way connection between a Destination and its interface which is handled by a
See moreDestinationStateable-conforming object. Destinations comes with aDestinationInterfaceStateobject which can be used for this purpose, though you can create your own class if you’d like to store other state in it. When a Destination is removed from the ecosystem, cleanup is done internally to ensure no retain cycles occur.Declaration
Swift
@MainActor public protocol Destinationable<DestinationType, ContentType, TabType> : AssistantAssigning, InteractorResultHandling, Identifiable -
This protocol represents Flow objects which coordinate routing, navigation, and the management of Destination objects as a user moves through an app’s interface.
Flows manage the creation, appearance, and removal of Destinations as a user navigates through the app. They are the single source of truth for what Destinations currently exist in the ecosystem. Typically you don’t interact with them directly after they’ve been configured. In most cases you can use one of the provided
See moreViewFloworControllerFlowclasses for SwiftUI and UIKit apps respectively.Declaration
Swift
@MainActor public protocol Flowable : AnyObject, Observable -
This protocol represents classes which holds internal state specific to the
See moreGroupedDestinationableprotocol.Declaration
Swift
public protocol GroupDestinationInternalStateable<DestinationType, ContentType, TabType> -
This abstract protocol represents a type of Destination which manages child Destinations, such as a
NavigationStackin SwiftUI.See moreNote
Protocols or classes that should take on group behavior should use
GroupedViewDestinationablefor SwiftUI projects andGroupedControllerDestinationablefor UIKit projects.Declaration
Swift
@MainActor public protocol GroupedDestinationable<DestinationType, ContentType, TabType> : AnyObject -
This protocol represents Interactors that handle requests using a synchronous context, typically providing results for requests via a
InteractorResponseClosure.Interactors provide an interface to perform some business logic, often acting as a datasource by interfacing with an API, handling system APIs, or some other self-contained work.
The concept of Interactors comes from Clean Swift, used in its architecture as a way to move logic and datasource management out of view controllers. In Destinations, the
Interactableprotocol represents Interactor objects which provide an interface to perform some logic or data request, typically by interfacing with an backend API, handling system APIs, or some other self-contained work.Datasourceableinherits from this protocol and should be used for objects which specifically represent a datasource of some kind. There are also Actor-based async versions of these protocols available.Though requests to Interactors can be made using a Destination’s
performRequestmethod, in general one should use theperformActionmethod. This abstracts the specific implementation details of an interactor away from the interface and lets it focus on making requests through a standardized request.The recommended way is to assign an event type to your request and using an
InteractorAssisting-conforming assistant to configure the request, leaving the Destination’s interface free of associated business logic.Interactors are typically created by Destination providers and stored in the Destination. Like with presentations of new Destinations, Interactor requests are associated with a particular
InterfaceActionobject and are represented by anInteractorConfigurationmodel object. Action types for each Interactor are defined as enums, keeping Interactor-specific knowledge out of the interface.For example, here we’re creating an Interactor action for making a pagination request to the ColorsDatasource, and then assign it to a
moreButtonevent type:let paginateAction = InteractorConfiguration<ColorsListProvider.InteractorType, ColorsDatasource>(interactorType: .colors, actionType: .paginate, assistantType: .basic) let colorsProvider = ColorsListProvider(interactorsData: [.moreButton: paginateAction])And here is that event type being called by a Destination’s interface. Note that
performActioncan throw and the Destination methodhandleThrowableautomatically handles that for you, logging any errors to the console with the built-in Logger class.
See moredestination().handleThrowable { try destination().performAction(eventType: .moreButton) }Declaration
Swift
public protocol Interactable<Request> : AbstractInteractable -
This protocol represents an assistant which helps a Destination make requests of an Interactor. Concrete assistants conforming to this protocol should handle requests for a specific Interactor type.
See moreDeclaration
Swift
@MainActor public protocol InteractorAssisting<InteractorType, ContentType> : Sendable -
This protocol represents a configuration for a specific action an Interactor should take.
See moreDeclaration
Swift
@MainActor public protocol InteractorConfiguring<InteractorType> -
This protocol represents an Interactor configuration model which defines a request to perform an action.
See moreDeclaration
Swift
public protocol InteractorRequestConfiguring : Sendable -
This protocol represents an enum which defines types of actions for a particular Interactor.
Declaration
Swift
public protocol InteractorRequestActionTypeable : Hashable, Sendable -
A protocol that defines an interface for performing Interactor requests and handling their results.
Conforming types are generally type-erased Destinations that dispatch requests to Interactors and process the
See moreResultobjects that their operations return. This allows Interactor assistants to be reused across different Destination objects instead of being tightly coupled to one.Declaration
Swift
@MainActor public protocol InteractorResultHandling<InteractorType, ContentType> : AnyObject, Sendable -
This protocol represents an assistant which configures an
See moreInterfaceActionobject that should present a Destination. This is typically used in conjunction with a Destination such asControllerDestinationorViewDestination.Declaration
Swift
@MainActor public protocol InterfaceActionConfiguring<EventType, DestinationType, ContentType> -
This protocol represents an interface’s state object, holding a reference to its associated Destination and a navigator object which manages the state of the interface’s navigation stack.
See moreDeclaration
Swift
@MainActor public protocol NavigationDestinationStateable<Destination> : DestinationStateable -
This protocol represents a state model associated with a Destination.
See moreDeclaration
Swift
@MainActor public protocol StateModeling<Destination> : AnyObject -
This protocol represents an object that coordinates the presentation of a Destination within the SwiftUI framework.
See moreDeclaration
Swift
@MainActor public protocol DestinationSwiftUICoordinating : DestinationInterfaceCoordinating -
This protocol represents a type of Destination which manages child Destinations in a SwiftUI project.
Declaration
Swift
@MainActor public protocol GroupedViewDestinationable<DestinationType, ContentType, TabType> : GroupedDestinationable, ViewDestinationable -
A protocol representing a SwiftUI
See moreViewthat is associated with a Destination and contains aNavigationStack.Declaration
Swift
@MainActor public protocol NavigatingDestinationInterfacing<DestinationType, ContentType, TabType> : ViewDestinationInterfacing where Self.DestinationState : NavigationDestinationStateable -
This protocol represents a type of Destination which manages a SwiftUI
See moreNavigationStack.Declaration
Swift
@MainActor public protocol NavigatingViewDestinationable<DestinationType, ContentType, TabType> : GroupedViewDestinationable where Self.ViewType : NavigatingDestinationInterfacing -
A protocol defining a SwiftUI
Viewwhich handles aNavigationSplitViewand conforms to Destinations.Declaration
Swift
@MainActor public protocol NavigationSplitViewDestinationInterfacing : ViewDestinationInterfacing where Self.Destination : NavigationSplitViewDestinationable -
This protocol represents a Destination whose interface
See moreViewhandles aNavigationSplitView.Declaration
Swift
@MainActor public protocol NavigationSplitViewDestinationable<DestinationType, ContentType, TabType> : GroupedViewDestinationable where Self.ViewType : NavigationSplitViewDestinationInterfacing -
This protocol configures the presentation of a SwiftUI sheet.
See moreDeclaration
Swift
public protocol SheetPresentationConfiguring : Equatable, Identifiable -
This protocol represents a
StateModeling-conforming object attached to aViewthat supports presenting a SwiftUI sheet via itsSheetPresenterobject.To present a sheet using Destinations, simply have the
See moreView‘s state model adopt this protocol, add the built-inViewModifier.destinationSheet(stateModel.sheetPresentation)) to theView, and present a Destination with apresentationTypeof.sheet(type: .present).Declaration
Swift
@MainActor public protocol SheetPresenting : StateModeling where Self.Destination : ViewDestinationable -
This protocol represents a model used for presenting a SwiftUI sheet element.
See moreDeclaration
Swift
public protocol Sheetable : Identifiable -
A protocol defining a SwiftUI
See moreViewwhich handles aTabViewand conforms to Destinations.Declaration
Swift
@MainActor public protocol TabBarViewDestinationInterfacing<TabType> : TabBarDestinationInterfacing, ViewDestinationInterfacing where Self.Destination : TabBarViewDestinationable -
This protocol represents a Destination whose interface view handles a
See moreTabBar.Declaration
Swift
@MainActor public protocol TabBarViewDestinationable<DestinationType, ContentType, TabType> : GroupedViewDestinationable -
A protocol representing a SwiftUI
See moreViewthat is associated with a Destination.Declaration
Swift
@MainActor public protocol ViewDestinationInterfacing<DestinationType, ContentType, TabType> : DestinationInterfacing, View where Self.Destination : ViewDestinationable -
This protocol represents objects which construct and provide
See moreViewDestinationableobjects, including their associated interface elements. Provider objects which conform to this protocol should build discrete Destinations based on their specific destination type.Declaration
Swift
@MainActor public protocol ViewDestinationProviding<DestinationType, ContentType, TabType> : DestinationProviding where Self.PresentationType == DestinationPresentationType<Self.DestinationType, Self.ContentType, Self.TabType> -
This protocol represents a Destination which is associated with a SwiftUI
See moreView.Declaration
Swift
@MainActor public protocol ViewDestinationable<DestinationType, ContentType, TabType> : Destinationable -
This protocol represents a Flow which coordinates routing and navigation as a user moves through a SwiftUI-based app.
See moreDeclaration
Swift
@MainActor public protocol ViewFlowable<DestinationType, ContentType, TabType> : Flowable where Self.InterfaceCoordinator == DestinationSwiftUICoordinator, Self.PresentationType == DestinationPresentationType<Self.DestinationType, Self.ContentType, Self.TabType> -
This protocol represents a
Viewthat manages a TabBar.Declaration
Swift
@MainActor public protocol TabBarDestinationInterfacing : DestinationInterfacing -
This protocol represents an enum describing the types of content that are able to be sent through Destinations.
Declaration
Swift
public protocol ContentTypeable : Equatable, Sendable -
This protocol represents an enum which defines Destination presentation types.
See moreDeclaration
Swift
@MainActor public protocol DestinationPresentationTypeable -
This protocol represents enums which define event types associated with a Destination.
See moreDeclaration
Swift
public protocol EventTypeable : CaseIterable, Hashable, Sendable -
This protocol represents an enum which defines Interactors in the app. It can be scoped to an individual Destination.
Declaration
Swift
public protocol InteractorTypeable : Hashable, Sendable -
This protocol represents an enum which defines Destination types for an app which can be routed to.
See moreDeclaration
Swift
public protocol RoutableDestinations : CaseIterable, Hashable -
A protocol representing an enum which defines tabs for a tab bar interface.
See moreDeclaration
Swift
public protocol TabTypeable : CaseIterable, Hashable where Self.AllCases : RandomAccessCollection -
A protocol representing UIViewControllers which conform to Destinations
See moreDeclaration
Swift
@MainActor public protocol ControllerDestinationInterfacing : UIViewController, DestinationInterfacing -
This protocol represents a
UINavigationControllerthat is associated with a Destination.Declaration
Swift
@MainActor public protocol NavigationControllerDestinationInterfacing : UINavigationController, ControllerDestinationInterfacing where Self.DestinationState : NavigationDestinationStateable -
This protocol represents objects which construct and provide
See moreControllerDestinationableobjects, including their associated interface elements. Provider objects which conform to this protocol should build discrete Destinations based on their specific destination type.Declaration
Swift
@MainActor public protocol ControllerDestinationProviding<DestinationType, ContentType, TabType> : DestinationProviding where Self.PresentationType == DestinationPresentationType<Self.DestinationType, Self.ContentType, Self.TabType> -
This protocol represents a Destination which is associated with a
See moreUIViewController.Declaration
Swift
@MainActor public protocol ControllerDestinationable<DestinationType, ContentType, TabType> : Destinationable -
This protocol represents a Flow which coordinates routing and navigation as a user moves through a UIKit-based app.
See moreDeclaration
Swift
@MainActor public protocol ControllerFlowable<DestinationType, ContentType, TabType> : Flowable where Self.InterfaceCoordinator == DestinationUIKitCoordinator, Self.PresentationType == DestinationPresentationType<Self.DestinationType, Self.ContentType, Self.TabType> -
This protocol represents an object that coordinates the presentation of a Destination within the UIKit framework.
See moreDeclaration
Swift
@MainActor public protocol DestinationUIKitCoordinating : DestinationInterfaceCoordinating, UINavigationControllerDelegate -
This protocol represents a type of Destination which manages child Destinations in a UIKit project.
Declaration
Swift
@MainActor public protocol GroupedControllerDestinationable<DestinationType, ContentType, TabType> : ControllerDestinationable, GroupedDestinationable -
This protocol represents a Destination whose interface is a
See moreUINavigationController.Declaration
Swift
@MainActor public protocol NavigatingControllerDestinationable<DestinationType, ContentType, TabType> : GroupedControllerDestinationable where Self.ControllerType : NavigationControllerDestinationInterfacing -
A protocol representing a
UISplitViewControllerclass which conforms to Destinations.Declaration
Swift
@MainActor public protocol SplitViewControllerDestinationInterfacing : UISplitViewController, ControllerDestinationInterfacing where Self.Destination : SplitViewControllerDestinationable -
This protocol represents a Destination whose interface is a
See moreUISplitViewController.Declaration
Swift
@MainActor public protocol SplitViewControllerDestinationable<DestinationType, ContentType, TabType> : GroupedControllerDestinationable where Self.ControllerType : UISplitViewController -
This protocol represents an object that adapts a SwiftUI
See moreViewfor use inside aUIViewController.Declaration
Swift
@MainActor public protocol SwiftUIAdaptable -
This protocol represents the Destination of a UIKit controller which hosts SwiftUI content.
See moreDeclaration
Swift
@MainActor public protocol SwiftUIContainerDestinationable<DestinationType, ContentType, TabType> : ControllerDestinationable -
This protocol represents a controller that serves as a container for a SwiftUI
See moreView.Declaration
Swift
@MainActor public protocol SwiftUIContainerInterfacing<Content> : ControllerDestinationInterfacing -
This protocol represents a SwiftUI
See moreViewthat is hosted by a container controller within UIKit.Declaration
Swift
@MainActor public protocol SwiftUIHostedInterfacing : ViewDestinationInterfacing -
A protocol representing a
See moreUITabBarControllerclass which conforms to Destinations.Declaration
Swift
@MainActor public protocol TabBarControllerDestinationInterfacing<TabType> : UITabBarController, ControllerDestinationInterfacing, TabBarDestinationInterfacing where Self.Destination : TabBarControllerDestinationable -
This protocol represents a Destination whose interface is a
See moreUITabBarController.Declaration
Swift
@MainActor public protocol TabBarControllerDestinationable<DestinationType, ContentType, TabType> : GroupedControllerDestinationable
View on GitHub
Protocols Reference