Skip to main content
Primer Checkout iOS SDK is currently in beta (v3.0.0-beta.1). The API is subject to change before the stable release.
PrimerPaymentMethods is the SwiftUI view that renders the list of available payment methods. It is composed from three @ViewBuilder slots — a header, a per-method method row, and an emptyState — and resolves its PrimerSelectionSession from the environment supplied by the .primerCheckoutSession(_:) modifier. Each slot defaults to the matching helper on PaymentMethodsDefaults, so calling PrimerPaymentMethods() with no arguments renders the SDK’s built-in UI. Override any one slot to customize that part of the list while keeping the defaults for the rest.
PrimerPaymentMethods is available on iOS 15.0 and later (@available(iOS 15.0, *)).

Signature

Parameters

Default behavior

By default PrimerPaymentMethods arranges its slots in a vertical stack:
  • Renders the default header.
  • When session.state.paymentMethods is non-empty, renders one default row per method. Each row’s tap triggers session.select(paymentMethod), starting that method’s flow.
  • When session.state.paymentMethods is empty, renders the default empty state.
If no PrimerSelectionSession is present in the environment (the view is used outside .primerCheckoutSession(_:)), nothing is rendered.
Wire the view hierarchy with .primerCheckoutSession(_:). PrimerPaymentMethods reads its session from the environment — you do not pass the session into the view directly.

CheckoutPaymentMethod

CheckoutPaymentMethod describes a single payment method available for selection. It contains the method’s display information and optional custom styling. The method slot receives one instance per available method, and selecting a method is also surfaced through session.state.selectedPaymentMethod.

Properties

CheckoutPaymentMethod conforms to Identifiable via id, so you can iterate methods directly with ForEach when building a custom list.

Customization

Custom method row

Override the method slot to render your own row. The slot receives the CheckoutPaymentMethod and an onSelect closure — call onSelect when the user taps your row to start that method’s flow.

Custom empty state

Override the emptyState slot to control what appears when no methods are available. The slot receives the PrimerSelectionSession so you can read selection state if needed.

Custom header

Override the header slot to replace the default section title.
The generic parameters Header, Method, and Empty are inferred from the slots you provide. When overriding only some slots, the remaining slots keep their PaymentMethodsDefaults bodies — you do not need to re-specify them.

See also

PrimerSelectionSession

The observable session that drives the method list and selection.

PaymentMethodsDefaults

Default slot bodies used by PrimerPaymentMethods.

PrimerVaultedPaymentMethods

Render and select saved (vaulted) payment methods.

PrimerCardForm

The slot-based card entry composable.