Запутанность обработчика завершений - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я использую 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)
}

Проблема, с которой я столкнулся сейчас, заключается в том, что когда я хочу отобразить эту цену в тексте метки, он запрашивает информацию о завершении

Что мне делать?положено для этого?

enter image description here

1 Ответ

0 голосов
/ 19 октября 2018

Вам нужно назвать это так

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 
    }

}
...