Как я могу отладить код для 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?
}
Я надеюсь, что вы найдете это полезным:)