# BestReward

```swift
struct BestReward
```

The single reward worth advertising, selected and formatted by the server, so
every surface shows an identical number.

`formatted` contains a non-breaking space (U+00A0) before the currency symbol —
render it as-is, never compare it against an ordinary-space string.

**Conforms to** `Swift.Equatable`, `Swift.Hashable`, `Swift.Sendable`

Defined in: [Sources/FrakSDK/Rewards/Rewards.swift:98](https://github.com/frak-id/wallet/blob/35995d05c807efe1e0d6319fdede3ad363124d1e/sdk/ios/Sources/FrakSDK/Rewards/Rewards.swift#L98)

## Properties

### formatted

```swift
let formatted: String
```

### isProductScoped

```swift
let isProductScoped: Bool
```

Whether the selected campaign is gated to a `productScope`. The gate, not the reward's
basis — a product-gated campaign can still pay a percentage of the whole basket.
Defaults to `false` so a backend that predates this field still decodes.

### lockupDurationDays

```swift
let lockupDurationDays: Double?
```

### matchedProducts

```swift
let matchedProducts: [ProductDetails]?
```

The subset of the products this call supplied that matched the winning campaign's
scope. `nil` for an unscoped winner, or when no products were supplied.

### minPurchaseAmount

```swift
let minPurchaseAmount: String?
```

### minPurchaseValue

```swift
let minPurchaseValue: Double?
```

### payoutType

```swift
let payoutType: String
```

Which shape `formatted` describes: `fixed`, `percentage` or `tiered`. A plain
`String` so a payout type newer than this binary still decodes.

## Operators

### !=(_:_:)

```swift
static func != (lhs: Self, rhs: Self) -> Bool
```

Returns a Boolean value indicating whether two values are not equal.

Inequality is the inverse of equality. For any values `a` and `b`, `a != b`
implies that `a == b` is `false`.

This is the default implementation of the not-equal-to operator (`!=`)
for any type that conforms to `Equatable`.

- Parameters:
  - lhs: A value to compare.
  - rhs: Another value to compare.