SwiftUI Preview SKProduct с вводной ценой - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь смоделировать SKProduct, чтобы я мог просмотреть его на холсте предварительного просмотра в SwiftUI.

Мне удалось создать фиктивный SKProduct с удобной инициализацией внутри SKProduct ...

//Mock Product
convenience init(identifier: String, price: String, priceLocale: Locale) {
    self.init()
    self.setValue(identifier, forKey: "productIdentifier")
    self.setValue(NSDecimalNumber(string: price), forKey: "price")
    self.setValue(priceLocale, forKey: "priceLocale")
}

Но я не могу понять, как имитировать вводные данные о ценах. Мне нужны единицы измерения subscriptionPeriodOfUnits и subscriptionPeriod

Я не уверен, в какие ключи писать.

Есть мысли?

1 Ответ

1 голос
/ 25 апреля 2020

Они являются открытыми классами, поэтому решение состоит в том, чтобы просто использовать наследование, как в демонстрации ниже.

Таким образом, вы можете создавать и настраивать свои MockSK* сущности так же, как вы, и передавать их везде, где реально SK* ожидаемые случаи.

import StoreKit

class MockSKProductSubscriptionPeriod: SKProductSubscriptionPeriod {
    private let _numberOfUnits: Int
    private let _unit: SKProduct.PeriodUnit

    init(numberOfUnits: Int = 1, unit: SKProduct.PeriodUnit = .year) {
        _numberOfUnits = numberOfUnits
        _unit = unit
    }

    override var numberOfUnits: Int {
        self._numberOfUnits
    }

    override var unit: SKProduct.PeriodUnit {
        self._unit
    }
}

class MockSKProduct: SKProduct {
    private var _subscriptionPeriod: SKProductSubscriptionPeriod

    init(subscriptionPeriod: SKProductSubscriptionPeriod = MockSKProductSubscriptionPeriod()) {
        _subscriptionPeriod = subscriptionPeriod
    }

    override var subscriptionPeriod: SKProductSubscriptionPeriod? {
        get {
            _subscriptionPeriod
        }
    }
}
...