gpt4 book ai didi

swift - 将函数结果呈现给 UILabel (Swift) (SwiftyStoreKit)

转载 作者:行者123 更新时间:2023-11-28 15:56:57 26 4
gpt4 key购买 nike

我想在我的标签内显示 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 隐式返回的值UILabelString? 属性。那是行不通的。

您不能轻易地从 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 中有你的 SKProducterrorMessage ,你可以自由地用它做任何你想做的事: show警报、更新标签等。总的来说,这段代码应该更加灵活和分离,这通常是一件好事;)

关于swift - 将函数结果呈现给 UILabel (Swift) (SwiftyStoreKit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41588678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com