просто несовместимость или реальная ошибка в быстром коде - PullRequest
0 голосов
/ 11 марта 2019

привет, я работаю с 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)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...