Получить локализованную цену продукта - Неожиданное возвращаемое значение в пустой функции
Я использую SwiftyStoreKit для реализации iAP в моем проекте. У меня есть автоматически обновляемая подписка, которую пользователи могут покупать и восстанавливать. Кажется, это работает нормально, однако у меня возникают проблемы при получении информации о продукте для отображения в пользовательском интерфейсе.
Я пытаюсь отобразить локализованную цену, возвращаемая цена - это годовая стоимость, поэтому мне нужно разделить число на 12, чтобы оно также отображалось как ежемесячная стоимость. Однако при получении цены и попытке возврата к значению я получаю следующую ошибку:
Неожиданное возвращаемое значение в функции 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)")
}
}
}
1 ответ
Неожиданное возвращаемое значение в функции void
Ошибка говорит о том, что вы пытаетесь вернуть какое-то значение из функции void.
Теперь давайте разберемся с вашим делом.
Ваша фактическая функция
func getSubscriptionPricePerMonth() -> String {}
который вы ожидаете вернуть вам некоторое значение в виде строки. Но, глядя на код внутри, вы используете асинхронный блок, который имеет тип возврата void
SwiftyStoreKit.retrieveProductsInfo([productId]) { result -> Void in
// Here you are returning some values after parsing the data, which is not allowed.
}
Для возврата чего-либо из блока вы можете использовать DispatchGroup, чтобы сделать его синхронным
Надеюсь это поможет.