如何调试APIService的代码

时间:2018-08-07 02:07:25

标签: ios swift passcode

我是快速使用API​​创建登录的新手。我遵循了Treehouse的视频教程,但使用了不同版本的Xcode和Swift。我不知道我将在这些代码中放入什么。希望您能为我提供帮助,或者可以给我提供我可以用来创建登录页面的任何参考信息,该页面将在文本字段中输入密码并提交以验证代码是否存在并发布数据。非常感谢。 Error in the Image

当我点击修复时,这些代码行就会出现

@animal = Animal.new(animal_params)

1 个答案:

答案 0 :(得分:0)

为了开始解决此问题,您需要查看什么protocols

基于与这种情况相关的信息,它们本质上定义了函数的签名(除其他外)。协议的名称和功能签名为给定功能的实现提供了线索。一个简单的例子很容易说明这一点:

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?
}

我希望对您有所帮助:)