完成处理程序混淆
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
【讨论】:
以上是关于完成处理程序混淆的主要内容,如果未能解决你的问题,请参考以下文章