Swift_SimpleNetworkLibrary
示例
要运行示例项目,首先克隆存储库,然后从 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文件。