Как я могу отладить код для APIService

Я новичок в создании входа с использованием API в Swift. Я проследил видеоурок из Treehouse, но использовал другую версию Xcode и swift. Я не знаю, что я добавлю в этот код. Надеюсь, вы могли бы помочь мне Или вы можете дать мне какие-либо ссылки, которые я мог бы использовать при создании страницы входа, которая будет вводить код доступа в текстовое поле и отправлять для проверки, если код существует и будет публиковать данные. Огромное спасибо. Ошибка в изображении

Когда я нажимаю Исправить эти строки кода появились

final class EventAPIClient: APIService {
func JSONTaskWithRequest(request: URLRequest, completion: (JSON?, HTTPURLResponse?, NSError?) -> Void) -> JSONTask {
    <#code#>
}

init(config: URLSessionConfiguration) {
    <#code#>
}


let  configuration: URLSessionConfiguration
lazy var session: URLSession = {
return URLSession(configuration: self.configuration)
}()

private let token: String

init(config: URLSessionConfiguration, APIKey: String) {
    self.configuration = config
    self.token = APIKey
}

convenience init(APIKey: String) {

    self.init(config: URLSessionConfiguration.default, APIKey: APIKey)
}
}

1 ответ

Решение

Для того, чтобы начать решать эту проблему, вам нужно посмотреть, какие протоколы.

Сосредоточив внимание на информации, относящейся к этой ситуации, они по существу определяют сигнатуру функции (среди прочего). Имя протокола и сигнатура функции не позволяют понять, какой должна быть реализация данной функции. Это легко иллюстрируется простым примером:

protocol MathematicalOperations {
    func add(_ int: Int, to int: Int) -> Int
}

class Calculator: MathematicalOperations {
    func add(_ intA: Int, and intB: Int) -> Int {
        return intA + intB
    }
}

// Usage
let calculator = Calculator()
let sum = calculator.add(15, and: 10)
print(sum) // 25

связывая это обратно в вашу ситуацию. Протокол APIService определил функции следующим образом:

protocol APIService {
    func JSONTaskWithRequest(request: URLRequest, completion: (JSON?, HTTPURLResponse?, NSError?) -> Void) -> JSONTask
    init(config: URLSessionConfiguration)
}

Ваш EventAPIClient класс сообщает компилятору, что значит соответствовать APIService протокол:

final class EventAPIClient: APIService {

Чтобы соответствовать протоколу, EventAPIClient необходимо обеспечить реализацию всех определений в APIService,

Что касается решения этой проблемы, есть некоторые недостающие фрагменты информации, касающиеся определения JSONTask и т. Д. Однако, вот пример реализации, которая должна, если не что иное, дать вам отправную точку:

func JSONTaskWithRequest(request: URLRequest, completion: @escaping (JSON?, HTTPURLResponse?, NSError?) -> Void) -> JSONTask {
    let task = session.dataTask(with: request) { data, response, error in
        if let error = error {
            completion(nil, response, error as NSError?)
        } else if HTTPResponse.statusCode == 200 { // OK response code
            do {
                let json = try JSONSerialization.jsonObject(with: data!, options: []) as? JSON
                completion(json, response, nil)
            } catch let error as NSError {
                completion(nil, response, error)
            }
        } else {
            completion(nil, response, nil) // could create an error saying you were unable to parse JSON here
        }
    }
    return task as? JSONTask
}

init(config: URLSessionConfiguration) {
    self.configuration = config
    self.token = "APIKey" // put your default api key here, maybe from a constants file?
}

Я надеюсь, что вы найдете это полезным:)

Другие вопросы по тегам