问题描述
我想将 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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)