首页 > 解决方案 > 完成处理程序混淆

问题描述

我目前正在使用 SwiftyStoreKit 进行应用内购买,我用来尝试获取价格和产品描述等信息的功能有一个完成处理程序,我不熟悉使用完成处理程序并阅读 @escape if我想返回一个字符串或让一个值转义。我的功能代码如下:

func getPrice(product: IAPProducts, completion: @escaping (String) -> Void) {
    var priceString = ""
    SwiftyStoreKit.retrieveProductsInfo(["Grant.Marco.1000Coins"]) { result in
        if let product = result.retrievedProducts.first {
            priceString = product.localizedPrice!
            print("Product: \(product.localizedDescription), price: \(priceString)")
        }
        else if let invalidProductId = result.invalidProductIDs.first {
            print("Invalid product identifier: \(invalidProductId)")
        }
        else {
            print("Error: \(String(describing: result.error))")
        }
    }
    completion(priceString)
}

我现在遇到的问题是,当我想在标签文本中显示该价格时,它会询问完成信息

我要为此付出什么?

在此处输入图像描述

标签: iosswiftxcodesprite-kit

解决方案


你需要这样称呼它

SwiftyStoreKitController.shared.getPrice(product:IAPProducts.thousand) { (price) in
   // set here 
   let label = SKLabelNode(text:price)
}

完成的地方也需要改变

func getPrice(product: IAPProducts, completion: @escaping (String) -> Void) {
    var priceString = ""
    SwiftyStoreKit.retrieveProductsInfo(["Grant.Marco.1000Coins"]) { result in
        if let product = result.retrievedProducts.first {
            priceString = product.localizedPrice!
            print("Product: \(product.localizedDescription), price: \(priceString)")
        }
        else if let invalidProductId = result.invalidProductIDs.first {
            print("Invalid product identifier: \(invalidProductId)")
        }
        else {
            print("Error: \(String(describing: result.error))")
        }

        completion(priceString)  // << here 
    }

}

推荐阅读