Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SwiftNet

直接可用的Swift 网络库。

###没想到还有人用的。这个不维护了。新建链接可以看看 CNNetwork

##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

About

直接可用的Swift 网络库。

Resources

Stars

34 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages