Возвращение структуры из функции Swift 4 - PullRequest
0 голосов
/ 07 января 2019

У меня есть функция запроса, и после получения JSON. Я анализирую данные в экземпляр структуры. Как я могу вернуть этот экземпляр из моей функции? Теперь он возвращает экземпляр с переменными nil.

Получение JSON и его синтаксический анализ в структуре работает правильно, проблема с возвратом экземпляра.

class FinantialRequest {

        static func getData(id: Int, year: Int, mod : String, period: String)->CinemaChartModel{

            let parameters: Parameters = [
                "idc": id,
                "yy": year,
                "func": mod
            ]
            var chartModelSample = CinemaChartModel()
            request("https://placeholder.com/app.php", method: .post, parameters: parameters, encoding: URLEncoding.default).debugLog().responseJSON { responseJSON in
                switch responseJSON.result {
                case .success(let value):
                    do {
                        let parsedData = try FirebaseDecoder().decode(FinDataSample.self, from: value)
                        parsedData.data.forEach { sample in

                            switch sample.b.name {
                                case "Оборот кино":
                                    switch finantialDataSample.period! {
                                        case "1 Квартал":
                                            chartModelSample.moneyPeriodCinema = sample.k1
                                            chartModelSample.moneyBudgetPeriodCinema = sample.b.k1
                                        case "2 Квартал":
                                            chartModelSample.moneyPeriodCinema = sample.k2
                                            chartModelSample.moneyBudgetPeriodCinema = sample.b.k2
                                        case "3 Квартал":
                                            chartModelSample.moneyPeriodCinema = sample.k3
                                            chartModelSample.moneyBudgetPeriodCinema = sample.b.k3
                                        case "4 Квартал":
                                            chartModelSample.moneyPeriodCinema = sample.k4
                                            chartModelSample.moneyBudgetPeriodCinema = sample.b.k4
                                        default: break
                                        }
                                chartModelSample.moneyYyCinema = sample.yy
                                chartModelSample.moneyBudgetYyCinema = sample.b.yy
                            case "Количество людей":
                                switch finantialDataSample.period! {
                                    case "1 Квартал":
                                        chartModelSample.peoplePeriodCinema = sample.k1
                                        chartModelSample.peopleBudgetPeriodCinema = sample.b.k1
                                    case "2 Квартал":
                                        chartModelSample.peoplePeriodCinema = sample.k2
                                        chartModelSample.peopleBudgetPeriodCinema = sample.b.k2
                                    case "3 Квартал":
                                        chartModelSample.peoplePeriodCinema = sample.k3
                                        chartModelSample.peopleBudgetPeriodCinema = sample.b.k3
                                    case "4 Квартал":
                                        chartModelSample.peoplePeriodCinema = sample.k4
                                        chartModelSample.peopleBudgetPeriodCinema = sample.b.k4
                                    default: break
                                    }
                                chartModelSample.peopleYyCinema = sample.yy
                                chartModelSample.peopleBudgetYyCinema = sample.b.yy
                            default:
                                break
                        }
                    }

                } catch let error {
                    print(error)
                }
            case .failure(let error):
                print(error)
            }
        }
            return chartModelSample
        }

1 Ответ

0 голосов
/ 07 января 2019

Так как метод запроса является Closure , вы не можете напрямую вернуться к нему. Вам нужно сделать обработчик завершения следующим образом:

static func getData(id: Int, year: Int, mod : String, period: String, completion: ((CinemaChartModel?)->Void)){

 .............

} 

и запустите его с вашей структурой так:

completion(chartModelSample)

ИЛИ это может быть вызвано нулевым значением, если у вас нет значения для возврата, например:

completion(nil)

Вы можете вызвать этот метод так:

getData(id: Int, year: Int, mod : String, period: String, completion:{ (model) -> Void in
    .......
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...