简体   繁体   English

SwiftUI 预览 SK产品介绍价格

[英]SwiftUI Preview SKProduct with introductoryPrice

I am trying to mock an SKProduct so I'm able to view it in the preview canvas in SwiftUI.我正在尝试模拟 SKProduct,以便能够在 SwiftUI 的预览 canvas 中查看它。

I have been able to create a dummy SKProduct with a convenience init inside SKProduct...我已经能够在 SKProduct 内创建一个带有便利 init 的虚拟 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")
}

But I can't figure out how to mock introductoryPrice data.但我不知道如何模拟 introductoryPrice 数据。 I need the subscriptionPeriod numberOfUnits and subscriptionPeriod unit我需要subscriptionPeriod numberOfUnitssubscriptionPeriod 单位

I'm not sure what keys to write to.我不确定要写什么键。

Any thoughts?有什么想法吗?

They are open classes so the solution is just to use inheritance, like in below demo.它们是开放课程,因此解决方案就是使用 inheritance,如下面的演示所示。

So you can construct and set up your MockSK* entities as you with and pass everywhere, where real SK* instances expected.因此,您可以随心所欲地构建和设置您的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
        }
    }
}

backup 备份

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM