我正在使用SwiftyStoreKit在我的项目中实施iAP。我有一个可自动续订的订阅,用户可以购买和还原。这似乎工作正常,但是在检索要显示到UI的产品信息时遇到问题。
我正在尝试显示本地化价格,返回的价格是每年的费用,因此我需要将数字除以12才能显示为每月费用。但是,当获取价格并尝试返回价值时,会出现以下错误:
void函数中意外的非void返回值
设置按钮值
let subscribeButton = subscriptionManager.getSubscriptionPricePerMonth(isYearly: false)
subscribeButton(monthlyCost, for: .normal)
获取价格
//Get prices
func getSubscriptionPricePerMonth() -> String {
let productId = getProductId()
NetworkActivityIndicatorManager.networkOperationStarted()
SwiftyStoreKit.retrieveProductsInfo([productId]) { result in
NetworkActivityIndicatorManager.networkOperationFinished()
if let product = result.retrievedProducts.first {
let priceString = product.localizedPrice!
return priceString
} else if let invalidProductId = result.invalidProductIDs.first {
//return ("Could not retrieve product info", message: "Invalid product identifier: \(invalidProductId)")
print("Could not retrieve product info\(invalidProductId)")
} else {
let errorString = result.error?.localizedDescription ?? "Unknown error. Please contact support"
//return ("Could not retrieve product info, \(errorString)")
print("\(errorString)")
}
}
}
答案 0 :(得分:1)
void函数中意外的非void返回值
错误提示,您正在尝试从void函数返回一些值。
现在,让我们了解您的情况。
您的实际功能是
SwiftyStoreKit.retrieveProductsInfo([productId]) { result -> Void in
// Here you are returning some values after parsing the data, which is not allowed.
}
,您期望它以字符串形式返回一些值。但是看看里面的代码,您正在使用异步块,它的返回类型为空
#import "MPInAppMessagesController.h"
要从块中返回内容,可以使用DispatchGroup使其同步
希望这会有所帮助。