- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的标签内显示 SKProduct 商品的价格,而不是像 SwiftyStoreKit 那样显示为 alertView。
在viewDidLoad中,我试过了
coralsAppLabel.text = getInfo(PurchaseCorals)
但这会导致我无法将类型 () 转换为 UILabel 的错误。
这是基于下面的 SwiftyStoreKit 代码。
enum RegisteredPurchase : String {
case reefLifeCorals = "ReefLife4Corals"
}
@IBOutlet weak var coralsAppLabel: UILabel!
func getInfo(_ purchase: RegisteredPurchase) {
NetworkActivityIndicatorManager.networkOperationStarted()
SwiftyStoreKit.retrieveProductsInfo([purchase.rawValue]) { result in
NetworkActivityIndicatorManager.networkOperationFinished()
self.showAlert(self.alertForProductRetrievalInfo(result))
}
}
func alertForProductRetrievalInfo(_ result: RetrieveResults) -> UIAlertController {
if let product = result.retrievedProducts.first {
let priceString = product.localizedPrice!
return alertWithTitle(product.localizedTitle, message: "\(product.localizedDescription) - \(priceString)")
}
else if let invalidProductId = result.invalidProductIDs.first {
return alertWithTitle("Could not retrieve product info", message: "Invalid product identifier: \(invalidProductId)")
}
else {
let errorString = result.error?.localizedDescription ?? "Unknown error. Please contact support"
return alertWithTitle("Could not retrieve product info", message: errorString)
}
}
感谢任何帮助
最佳答案
这里的主要问题是您试图分配 Void
(又名 ()
)函数 getInfo
隐式返回的值UILabel
的 String?
属性。那是行不通的。
您不能轻易地从 getInfo
函数返回所需的信息,因为它进行异步调用。完成您需要的一种方法是将代码重构为如下所示(没有检查语法错误,所以要小心):
override func viewDidLoad() {
super.viewDidLoad()
getProductInfoFor(PurchaseCorals, completion: { [weak self] (product, errorMessage) in
guard let product = product else {
self?.coralsAppLabel.text = errorMessage
return
}
let priceString = product.localizedPrice!
self?.coralsAppLabel.text = "\(product.localizedDescription) - \(priceString)"
})
}
func getProductInfoFor(_ purchase: RegisteredPurchase, completion: (product: SKProduct?, errorMessage: String?) -> Void) {
NetworkActivityIndicatorManager.networkOperationStarted()
SwiftyStoreKit.retrieveProductsInfo([purchase.rawValue]) { result in
NetworkActivityIndicatorManager.networkOperationFinished()
let extractedProduct = self.extractProductFromResults(result)
completion(product: extractedProduct.product, errorMessage: extractedProduct.errorMessage)
}
}
func extractProductFromResults(_ result: RetrieveResults) -> (product: SKProduct?, errorMessage: String?) {
if let product = result.retrievedProducts.first {
return (product: product, errorMessage: nil)
}
else if let invalidProductId = result.invalidProductIDs.first {
return (product: nil, errorMessage: "Invalid product identifier: \(invalidProductId)")
}
else {
let errorString = result.error?.localizedDescription ?? "Unknown error. Please contact support"
return (product: nil, errorMessage: errorString)
}
}
这里你在完成闭包的 viewDidLoad
中有你的 SKProduct
或 errorMessage
,你可以自由地用它做任何你想做的事: show警报、更新标签等。总的来说,这段代码应该更加灵活和分离,这通常是一件好事;)
关于swift - 将函数结果呈现给 UILabel (Swift) (SwiftyStoreKit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41588678/
我正在使用 SwiftyStoreKit在我的申请中。我还有一个自动续订订阅,可以正常购买。 自动续订订阅 已购买,当用户启动应用程序时,它会使用 verifyReceipt 验证订阅。通常在检查时,
我正在学习实现应用内购买的教程,https://www.youtube.com/watch?v=dwPFtwDJ7tc&t=1170s当我尝试编写它时,有一行代码与教程不同。 视频说把这行代码写成:
因此,我对应用程序中的自动续订订阅有一个非常基本的概念,可以解锁 PRO 功能。我还有一项非消耗性购买,它是“一次性购买订阅”,可以一次性解锁 PRO 功能。 我无法理解的是,当我调用 restore
如何使用 SwiftyStoreKit 检查用户是否购买了产品 ID 为 com.X.X 的产品?我想使用 SwiftyStoreKit 代码来检查用户是否已经使用应用内购买系统购买了产品?我想这样做
在第一个版本中,我使用了 3 个产品 ID 每月 三个月 和年度订阅 在我的新版本的应用程序中有 2 个产品 ID,这是全新的 月份 年份 所以我的问题是,对于已经使用旧产品 ID 购买订阅的老用户,
我正在将 myp 项目从 Swift 2.3 升级到 3。 来自 SwiftyStoreKit 的 Github 的示例代码: .SwiftyStoreKit.purchaseProduct("com
我想在我的标签内显示 SKProduct 商品的价格,而不是像 SwiftyStoreKit 那样显示为 alertView。 在viewDidLoad中,我试过了 coralsAppLabel.te
我是一名优秀的程序员,十分优秀!