完成处理程序混淆

Posted

技术标签:

【中文标题】完成处理程序混淆【英文标题】:Completion handler confusion 【发布时间】:2018-10-19 01:58:30 【问题描述】:

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

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)

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

我要为此付出什么?

【问题讨论】:

【参考方案1】:

你需要这样称呼它

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 
    


【讨论】:

以上是关于完成处理程序混淆的主要内容,如果未能解决你的问题,请参考以下文章

有没有混淆 C# 源代码的程序? [关闭]

事件处理程序订阅混淆

正确支持WPF的混淆器

在将程序集集成到MSI之前对程序集进行模糊处理

我可以使用本机编译作为 Java 混淆吗

使用 Proguard 处理 Jackson 库后混淆时出错