Получить локализованную цену продукта - Неожиданное возвращаемое значение в пустой функции

Я использую 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, чтобы сделать его синхронным

Надеюсь это поможет.

Другие вопросы по тегам