首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数Swift 4的返回结构

函数Swift 4的返回结构
EN

Stack Overflow用户
提问于 2019-01-07 12:47:07
回答 1查看 977关注 0票数 0

我有请求函数,在获得JSON之后。我将数据解析为结构实例。我如何从我的函数返回这个实例?现在它用零变量返回实例。

获取JSON并将其解析为结构是正确的,这与返回实例有问题。

代码语言:javascript
复制
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
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 13:24:37

因为请求方法本身是一个闭包,所以不能直接从它返回。您需要像这样做完成处理程序:

代码语言:javascript
复制
static func getData(id: Int, year: Int, mod : String, period: String, completion: ((CinemaChartModel?)->Void)){

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

} 

像这样用你的结构触发它:

代码语言:javascript
复制
completion(chartModelSample)

或者,如果您没有可以返回的值,则可以使用零值触发该值,例如:

代码语言:javascript
复制
completion(nil)

您可以这样调用此方法:

代码语言:javascript
复制
getData(id: Int, year: Int, mod : String, period: String, completion:{ (model) -> Void in
    .......
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54074753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档