【问题标题】:SwiftUI Preview SKProduct with introductoryPriceSwiftUI Preview SKProduct with introductoryPrice
【发布时间】:2020-04-24 20:27:38
【问题描述】:

我正在尝试模拟一个 SKProduct,以便能够在 SwiftUI 的预览画布中查看它。

我已经能够在 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")
}

但我不知道如何模拟 introductoryPrice 数据。我需要 subscriptionPeriod numberOfUnitssubscriptionPeriod 单位

我不确定要写入哪些键。

有什么想法吗?

【问题讨论】:

    标签: canvas swiftui skproduct


    【解决方案1】:

    它们是开放类,因此解决方案就是使用继承,如下面的演示。

    因此,您可以像您一样构建和设置您的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!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多