快速代码中的不兼容或实际错误

时间:2019-03-11 14:22:31

标签: swift

您好,我正在使用Swift 6.2(我的电脑的性能不支持++)

我已经从开放式教室复制了此程序到我的文件中,但是有很多错误

我只想知道这仅仅是快速兼容性的问题还是代码中确实存在错误

//****************

import UIKit

class QuestionManager {
    private let url = URL(string: "https://opentdb.com/api.php?amount=10&type=boolean")! 

// exemple of message error: use of unresolved identifier 'URL'    



    static let shared = QuestionManager()
    private init() {}

// FIX IT : replace static with class ... 

// AND LOT OF MESSAGE ERROR LIKE THIS...

    func get(completionHandler: @escaping ([Question]) -> ()) {
        let task = URLSession.shared.dataTask(with: self.url) { (data, response, error) in
            guard error == nil else {
                completionHandler([Question]())
                return
            }
            DispatchQueue.main.async {
                completionHandler(self.parse(data: data))
            }
        }
        task.resume()
    }

    private func parse(data: Data?) -> [Question] {
        guard let data = data,
        let serializedJson = try? JSONSerialization.jsonObject(with: data, options: []),
        let parsedJson = serializedJson as? [String: Any],
        let results = parsedJson["results"] as? [[String: Any]] else {
            return [Question]()
        }
        return getQuestionsFrom(parsedDatas: results)
    }

    private func getQuestionsFrom(parsedDatas: [[String: Any]]) -> [Question]{
        var retrievedQuestions = [Question]()

        for parsedData in parsedDatas {
            retrievedQuestions.append(getQuestionFrom(parsedData: parsedData))
        }

        return retrievedQuestions
    }

    private func getQuestionFrom(parsedData: [String: Any]) -> Question {
        if let title = parsedData["question"] as? String,
        let answer = parsedData["correct_answer"] as? String {
            return Question(title: String(htmlEncodedString: title)!, isCorrect: (answer == "True"))
        }
        return Question()
    }
}


extension String {

    init?(htmlEncodedString: String) {

        guard let data = htmlEncodedString.data(using: .utf8) else {
            return nil
        }

        let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
            NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html,
            NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue
        ]

        guard let attributedString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else {
            return nil
        }

        self.init(attributedString.string)
    }

}

0 个答案:

没有答案