PrimerCardForm is a SwiftUI View that renders a complete card payment form, composed from three section slots: card details, billing address, and submit button. Each section is a @ViewBuilder slot you can replace.
The form resolves its PrimerCardFormSession from the environment (provided by the .primerCheckoutSession(_:onCompletion:) modifier), so it can be embedded anywhere — inside the modal PrimerCheckout or inline in your own layout.
Requires iOS 15.0+.
PrimerCardForm is @available(iOS 15.0, *).Signature
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
cardDetails | (PrimerCardFormSession) -> CardDetails | { CardFormDefaults.cardDetails($0) } | Slot for the card input fields (number, expiry, CVV, cardholder name). |
billingAddress | (PrimerCardFormSession) -> Billing | { CardFormDefaults.billingAddress($0) } | Slot for the billing address fields. Only rendered when required by the session. |
submitButton | (PrimerCardFormSession) -> Submit | { CardFormDefaults.submitButton($0) } | Slot for the submit/pay button. |
PrimerCardFormSession, which exposes the published state and the field-update and submit() methods you need to drive custom UI.
Every slot is generic and defaults to a
CardFormDefaults builder. Because the defaults are supplied per-parameter, you can override any single slot and leave the rest at their default styling — you never have to re-implement the whole form.Default layout
The default form stacks the three slots vertically:| Order | Slot | Default content |
|---|---|---|
| 1 | cardDetails | CardFormDefaults.cardDetails — card number, expiry, CVV, cardholder name |
| 2 | billingAddress | CardFormDefaults.billingAddress — billing address fields, rendered only when the session requires them |
| 3 | submitButton | CardFormDefaults.submitButton — the pay button |
CardFormDefaults.unavailable() instead.
Usage
Default form
Render the fully styled default card form with no arguments:Overriding a single slot
To customize one section, pass a labeled argument and leave the others at their defaults. Here only the submit button is replaced —cardDetails and billingAddress keep the default styling:
Recomposing the card section from building blocks
You don’t have to discard the default fields when customizing a slot. Compose the default content with your own views using the per-field builders onCardFormDefaults:
CardFormDefaults.cardNumber, expiryDate, cvv, and cardholderName:
See also
PrimerCardFormSession
State, field-update methods, and
submit() passed into every slot.CardFormDefaults
Default section and field builders used by each slot.
Card field components
Individual field building blocks for recomposing the card section.
PrimerPaymentMethods
Render the list of available payment methods alongside the card form.