Swift_SimpleNetworkLibrary 0.6.0

Swift_SimpleNetworkLibrary 0.6.0

Swapnil Sankla 维护。



Swift_SimpleNetworkLibrary

CI Status Version License Platform

示例

要运行示例项目,首先克隆存储库,然后从 Example 目录中运行 pod install

要求

安装

Swift_SimpleNetworkLibrary 可通过 CocoaPods 使用。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Swift_SimpleNetworkLibrary'

GET 请求

让我们尝试使用一个非常酷的REST API http://dummy.restapiexample.com/api/v1/employees。这个API提供了一套虚拟的员工数据。员工数据看起来大致如下。

struct Employee: Codable {
    let employee_name: String
    let employee_salary: String
    let employee_age: String
}

现在,要获取API中的员工详细信息,我们只需要在NetworkLayer上调用get方法。

let successHandler: ([Employee]) -> Void = { (employees) in
  print(employees)
}

let errorHandler: (String) -> Void = { (error) in
  print(error)
}

NetworkLayer().get(urlString: "http://dummy.restapiexample.com/api/v1/employees",
                   headers: ["key": "value"],
                   successHandler: successHandler,
                   errorHandler: errorHandler)

最酷的部分是 Codable 协议,它使得网络层具有通用性。同时也要注意,Swift 的强类型推断在调用get方法时非常有帮助,因为我们不需要指定期望得到的响应类型。酷吧?

POST请求

POST请求同样简单!

let emp1 = Employee(name: "Test_123", salary: "12234", age: "22")
NetworkLayer().post(urlString: "http://dummy.restapiexample.com/api/v1/create",
                    headers: ["key": "value"],
                    body: emp1,
                    errorHandler: errorHandler)

单元测试

我们都知道 Swift 建议不要使用模拟(mocks),而是依赖其他类型的替身进行测试。本包包含一个虚拟网络层来简化调用方法的单元测试。

假设你想测试以下代码中的 getExample 方法。

class Presenter {
    let networkLayer: NetworkLayer
    var view: ViewProtocol?

    init(view: ViewProtocol,
         networkLayer: NetworkLayer = NetworkLayer()) {
        self.view = view
        self.networkLayer = networkLayer
    }

    func getExample() {
        let successHandler: ([Employee]) -> Void = { (employees) in
            print(employees)
            self.view?.displayEmployees(employees: employees)
        }
        let errorHandler: (String) -> Void = { (error) in
            print(error)
            self.view?.displayError(error: error)
        }

        networkLayer.get(urlString: "http://dummy.restapiexample.com/api/v1/employees",
                         successHandler: successHandler,
                         errorHandler: errorHandler)
    }

以下是编写测试的方法,我们直接从包装中得到 DummyNetworkLayer。

class PresenterTests: XCTestCase {
    let view = DummyViewController()
    let networkLayer = DummyNetworkLayer()

    func test_getExample_callsDisplayEmployees_onSuccess() {
        networkLayer.successResponse = [Employee(name: "Swapnil",
                                                 salary: "123456",
                                                 age: "30")]
        Presenter(view: view, networkLayer: networkLayer).getExample()
        XCTAssertTrue(view.displayEmployeesCalled)
    }

class DummyViewController: ViewProtocol {
    var displayEmployeesCalled = false

    func displayEmployees(employees: [Employee]) {
        displayEmployeesCalled = true
    }

Example 项目下的 PresenterTests 展示了所有使用 DummyNetworkLayer 的变体。

作者

Swapnil Sankla,[email protected]

许可

Swift_SimpleNetworkLibrary 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。