0

我想将 IAP 的产品数据加载到我的应用程序的 UI 中(它将显示在 SwiftUI 视图中,但该应用程序通常是使用 UIKit 构建的)

我有一个函数,我调用Purchases类的 products 函数。它返回一个SKProduct. 我使用结果生成器添加了一个额外的安全层。当它失败时,我会显示一个错误警报(我从来没有失败过)。此函数是包含与 Purchases 类的所有交互的类的一部分:

    func retrieve(_ id: ProductID, completed: @escaping(Result<SKProduct, LCError>) -> Void) {
        Purchases.shared.products([id.rawValue]) { products in
            guard !products.isEmpty else {
                completed(.failure(.unableToRetrieveProduct))
                return
            }
            
            let skProduct = products[0]
            completed(.success(skProduct))
        }
    }

ProductID是一个包含所有产品 ID 的自定义枚举,以便于访问并防止拼写错误。

我在我的ViewModel. 然后我打开结果。.failure案例并不完美,我应该抛出一个错误,但现在,它可以完成工作。当我测试我的应用程序时,它从未失败过:

    func getTipItem(for id: ProductID, title: String ) -> TipItem {
        var price: NSDecimalNumber = 1.0
        var priceSymbol: String = ""
        PurchaseService().retrieve(id) {  result in
            switch result {
            case .success(let product):
                price = product.price
                priceSymbol = product.priceLocale.currencySymbol ?? "Err$"
            case .failure(let error):
                 price = 1.0
                priceSymbol = error.localizedDescription
            }
        }
        return TipItem(title: title, price: price, currencySymbol: priceSymbol)
    }

struct TipItem: View {
    let title: String
    let price: NSDecimalNumber
    let currencySymbol: String
    var body: some View {
        HStack {
            Text(title)
            Spacer()
            Text("\(currencySymbol)\(price)")
        }.foregroundColor(Color(.label))
    }
}

但是,问题是当我的视图加载时,没有加载货币符号,价格只有 1(或 1.0000 等)。我知道它不会退回到 .faillure 的情况,因为我已经为默认货币符号添加了一个前缀Err,以便知道什么时候出了问题。

以下是调试日志:

2021-02-16 22:59:14.854771+0100 Learn Chemistry[10847:629632] [Purchases] - DEBUG: Requesting products with identifiers: {(
    "tip_small_099"
)}
2021-02-16 22:59:14.955628+0100 Learn Chemistry[10847:629814] [Purchases] - DEBUG: Products request finished
2021-02-16 22:59:14.955751+0100 Learn Chemistry[10847:629814] [Purchases] - DEBUG: Valid Products:
2021-02-16 22:59:14.955819+0100 Learn Chemistry[10847:629814] [Purchases] - DEBUG: tip_small_099 - <SKProduct: 0x2814ca160>
2021-02-16 22:59:14.955899+0100 Learn Chemistry[10847:629814] [Purchases] - DEBUG: Invalid Product Identifiers - (
)

仅当第一次加载视图时才会出现此问题。当我返回上一个屏幕并返回显示产品的视图时,它会正确显示它。

第一次加载视图时,如何使正确的数据也显示?还是 RC 框架中的错误?

谢谢!

BSM

4

0 回答 0