Canvas SwiftUI预览SKProduct和introductoryPrice

Canvas SwiftUI预览SKProduct和introductoryPrice,canvas,swiftui,skproduct,Canvas,Swiftui,Skproduct,我试图模拟SKProduct,以便能够在SwiftUI的预览画布中查看它 我已经能够创建一个虚拟的SKProduct,在SKProduct中有一个方便的init //Mock Product convenience init(identifier: String, price: String, priceLocale: Locale) { self.init() self.setValue(identifier, forKey: "productIdentifier")

我试图模拟SKProduct,以便能够在SwiftUI的预览画布中查看它

我已经能够创建一个虚拟的SKProduct,在SKProduct中有一个方便的init

//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")
}
但我不知道如何模拟introductoryPrice数据。我需要订阅期单位数和订阅期单位

我不知道该写些什么


有什么想法吗?

它们是开放类,所以解决方案就是使用继承,就像下面的演示一样

因此,您可以构建和设置您的
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
        }
    }
}

再次感谢@asperi!