首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UILabel (Swift) (SwiftyStoreKit)的现函数结果

UILabel (Swift) (SwiftyStoreKit)的现函数结果
EN

Stack Overflow用户
提问于 2017-01-11 10:43:01
回答 1查看 171关注 0票数 0

我希望在我的标签中显示SKProduct项目的价格,而不是alertView,就像SwiftyStoreKit显示的那样。

在viewDidLoad里,我试过

代码语言:javascript
复制
coralsAppLabel.text = getInfo(PurchaseCorals)

但这会导致错误,无法将类型()转换为UILabel。

这是基于下面的SwiftyStoreKit代码。

代码语言:javascript
复制
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)
    }
}

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 11:30:18

这里的主要问题是,您试图将函数Void (又名())的值隐式地分配给UILabelString?属性。那是行不通的。

您也不能轻松地从getInfo函数返回所需的信息,因为它执行异步调用。完成所需任务的一种方法是对代码进行重新分解,如下所示(没有检查语法错误,所以要小心):

代码语言:javascript
复制
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)
    }
}

在这里,您可以在完成闭包中使用SKProducterrorMessage,您可以随意使用它:显示警报、更新标签等。总的来说,这段代码应该更灵活一些,并且可以解耦--这通常是一件好事;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41588678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档