Latest 1.0.0
Homepage https://github.com/FengDeng/SwiftNet
License MIT
Platforms ios 8.0
Dependencies Alamofire, RxSwift
Authors

直接可用的Swift 网络库。

Request

采用链式调用配置Request

    Request(url: "https://api.github.com/users/FengDeng").method(.GET).parameters(["":""]).headers(["":""])……

请求前参数验证

    Request(url: "https://api.github.com/users/FengDeng")
        .beforeValidate({print("验证前先配置一些东西哈")})
        .validate({throw NSError(domain: "validate error", code: -1, userInfo: nil)})
        .beforeRequest({print("我要请求啦")})
        .responseJSON(User)
        .subscribeNext { (user) -> Void in
            print(user.avatar_url)
    }   

所有的闭包都可以直接抛出异常,一直走到Response的error里处理

为什么返回Observable。

处理多请求同时返回

    Observable.combineLatest(Request(url: "https://api.github.com/users/FengDeng").responseJSON(User), Request(url: "https://api.github.com/users/tangqiaoboy").responseJSON(User)) { (user1, user2) -> User in
        let user  = User()
        user.avatar_url = user1.avatar_url + user2.avatar_url
        return user
    }.subscribe { (event) -> Void in
        switch event{
        case .Completed:
            print("com")
        case .Next(let user):
            print(user.avatar_url)
        case .Error(let error):
            print(error)
        }
    }

这里就是两个用户都获取到才会调用下面的方法。这是RxSwift里的特性了。因为这里返回了Observable对象,所以很多特性都可以使用

等等

可用于两种API设计

  1. 集约型API设计

    Request(url: "https://api.github.com/users/FengDeng").responseJSON().subscribeNext { (json) -> Void in
        if let json = json{
            print(json)
        }
    }
  2. 离散型API设计

    首先创建一个符合 SwiftNetConfig 协议的类或结构体

    使用此类的实例来初始化Request

    //离散型的文件
    class SwiftNetConfigImp : SwiftNetConfig {
        var method : Alamofire.Method {return .GET}
        var url : URLStringConvertible {return "https://api.github.com/users/FengDeng"}
        var parameters : [String: AnyObject]? {return nil}
        var encoding: ParameterEncoding {return .URL}
        var headers: [String: String]? {return nil}
    
    }
    
    //请求
    Request(config: SwiftNetConfigImp()).responseJSON(User).subscribeNext { (user) -> Void in
        print(user.avatar_url)
    }

Response

返回值参考Alamofire设计 也调用Alamofire的接口。

返回JSON,Data,String等等,全部包装成Observable类以供订阅

也可以在返回的同时进行Model化。参考项目中的demo。至于您选择YYModel,MJExtension,SwiftJSON,Argo等等都可以

Model转化

responseJSON(User)->Observable<User>

等等

此处的User类需要实现ModelJSONType协议

不使用Model转化

responseJSON()->Observable<AnyObject?>

Cocoapods

pod 'SwiftNet', git: 'https://github.com/FengDeng/SwiftNet.git'

使用的第三方库

RxSwift

Alamofire

感谢RxSwift 和 Alamofire

Latest podspec

{
    "name": "SwiftNet",
    "version": "1.0.0",
    "license": "MIT",
    "summary": "u9879u76eeu53efu76f4u63a5u4f7fu7528u7684u7f51u7edcu8bf7u6c42u5e93",
    "authors": {
        "u9093u950b": "[email protected]"
    },
    "homepage": "https://github.com/FengDeng/SwiftNet",
    "source": {
        "git": "https://github.com/FengDeng/SwiftNet.git",
        "tag": "1.0.0"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source_files": "SwiftNet/SwiftNet/*.swift",
    "dependencies": {
        "Alamofire": [
            "~> 3.1.3"
        ],
        "RxSwift": [
            "~> 2.2.0"
        ]
    }
}

Pin It on Pinterest

Share This