首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么URLSession.DataTask.shared不能正常工作?

为什么URLSession.DataTask.shared不能正常工作?
EN

Stack Overflow用户
提问于 2019-05-20 01:05:11
回答 1查看 265关注 0票数 -2

我需要从服务器为我的应用程序获取一些测验。不幸的是,URLSession.DataTask.shared似乎不起作用。我如何解决这个问题?

这是给Swift 4的。

import Foundation
import UIKit

class QuizService {
    let baseUrl = "https://iosquiz.herokuapp.com/api/quizzes"

    func fetchQuizzes(completion: @escaping (([Quiz]?) -> Void)) -> Void {
        if let url = URL(string: baseUrl) {
            let request = URLRequest(url: url)

            let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
                if let data = data {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: [])
                        if let resultsList = json as? [String: Any], let results = resultsList["quizzes"] as? [[String: Any]] {
                            let quizzes = results.map({ json -> Quiz? in
                                print(json)
                                if
                                    let title = json["title"] as? String,
                                    let id = json["id"] as? Int,
                                    let level = json["level"] as? Int,
                                    let description = json["description"] as? String,
                                    let category = json["category"] as? String,
                                    let questions = json["questions"] as? [String: Any],
                                    let imageUrl = json["image"] as? String {
                                    let  quiz=Quiz(id:id,title:title,descript:description,category:category,level:level,imageUrl:imageUrl,questions:questions)
                                    return quiz
                                } else {
                                    return nil
                                }
                            }).filter { $0 != nil } .map { $0! }
                            completion(quizzes)
                        } else {
                            completion(nil)
                        }
                    } catch {
                        completion(nil)
                    }
                } else {
                    completion(nil)
                }
            }
            dataTask.resume()
        } else {
            completion(nil)
        }

    }
}

我的错误是测验字段为空,所以我的代码在我的视图控制器中不起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-05-20 11:16:27

我看了一下这里的回复,https://iosquiz.herokuapp.com/api/quizzes

“问题”应该是字典数组,而不是字典。

因此,如果您替换下面这一行,它应该可以工作

let questions = json["questions"] as? [String: Any]

用这一行

let questions = json["questions"] as? [[String: Any]]

顺便说一句,我更喜欢将解析json的逻辑提取到另一种方法中,以保持fetchQuizzes方法的简单。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56210133

复制
相关文章

相似问题

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