Swift,RxSwift實現(xiàn)的GitHub API庫

這是一個基于RxSwift的GitHub API庫。希望給那些想寫GitHub APP的同學(xué)一些方便。

RxGitHubAPI的整體設(shè)計

所有的返回都設(shè)計成對象。

例如用戶,YYUser

倉庫,YYRepository

tag,YYTag

等等……

還有很多對象,Issue,PullRequest請大家移步去clone項目看吧

所有的請求返回只有三種類型

1. Requestable

2. Pageable

3. Actionable

這三個全部都是符合Observable協(xié)議的類,也就是說它們是可以被訂閱的。

下面從一個具體例子來解釋下這三個類型的主要設(shè)計用途

1. 怎么樣獲取一個用戶?

2. 獲取到了這個用戶實例,怎么樣獲取他的所有倉庫?

3. 獲取到了所有倉庫,怎么樣給其中的一個倉庫star?

Requestable

這是一個符合Observable協(xié)議的類,它是一個泛型類,且泛類型必須符合NSObject協(xié)議。之所有這樣是因為本庫JSON解析成模型用的是MJExtension。整個工程就這一個庫是OC寫的。也許有時間會換成Swift的解析庫

這個類主要是實現(xiàn) 請求 返回結(jié)果(錯誤或者正確)。當(dāng)你訂閱這個類實例的時候,它就會去網(wǎng)絡(luò)請求,并且返回結(jié)果你訂閱者

具體例子,根據(jù)一個用戶名獲取這個用戶的詳細(xì)信息

RxGitHubAPI.yy_user("tangqiaoboy").subscribe { (user) -> Void in? ? ? ? ? ?

?????? switch user{? ? ? ? ? ? case .Next(let user):? ? ? ? ? ? ? ? print(user.login)? ? ? ? ? ? case.Completed:? ? ? ? ? ? ? ? print("completed")? ? ? ? ? ? case .Error:? ? ? ? ? ? ? ? print("error")? ? ? ? ? ? }? ? ? ? }? ?

//下面是控制臺輸出? ?

tangqiaoboy

completed

完美!

看看這個

RxGitHubAPI.yy_userstatic func yy_user(username:String)->Requestable{? ? ? ? return Requestable(mothod: .GET, url: kUserURL(username))? ? }? ? ? ?

短短幾行代碼。返回的是Requestable對象,泛型在這里是是YYUser。YYUser就是RxGitHubAPI里表示一個用戶信息的對象模型

Pageable

這是一個符合Observable協(xié)議的類,它是一個泛型類,且泛類型必須符合_ArrayType協(xié)議,且成員必須符合NSObject協(xié)議。因為這是提供給那些返回數(shù)組的API使用的,所有它的泛型必須符合數(shù)組,這樣才能給訂閱者提供想要的類型。這個類主要實現(xiàn) 請求? 返回結(jié)果(錯誤或者正確)? 翻頁當(dāng)你訂閱這個類的時候,他就會去網(wǎng)絡(luò)請求,并且返回結(jié)果給訂閱者。當(dāng)你想翻頁的時候,你可以對Pageable進(jìn)行nextPage操作

具體例子,就拿上面那個例子來說。在上面我們不是獲取到了一個tangqiaoboy用戶的對象模型YYUser嘛。假設(shè)我們現(xiàn)在持有這個YYUser的實例,就叫tangQiaoUser.我們來看看怎么獲取這個tangqiaoUser的所有public倉庫。

RxGitHubAPI.yy_user("tangqiaoboy").subscribe { (user) -> Void in? ? ? ? ? ? switch user{? ? ? ? ? ? case .Next(let user): print(user.login)? ? ? ? ? ? ? ?

//獲取到了tangqiao用戶? ? ? ? ? ? ? ? //獲取這個用戶的所有公開倉庫? ? ? ? ? ? ? ? user.yy_repos.subscribeNext({ (repos) -> Void in? ? ? ? ? ? ? ? ? ?

for repo in repos{? print(repo.full_name)} })? ? ? ? ? ?

case.Completed:print("completed")? ? ? ? ? ?

case .Error:print("error") }? ? ? ? }? ? ? ? ? ?

//控制臺輸出如下? ? tangqiaoboy/AVFoundationDemotangqiaoboy/ClassNote-iOStangqiaoboy/DocSets-for-iOStangqiaoboy/DoubanAlbumtangqiaoboy/ELCImageGrabbertangqiaoboy/ELCImagePickerControllertangqiaoboy/FlurryUsageSampletangqiaoboy/FmdbSampletangqiaoboy/HashTesttangqiaoboy/Hello-Worldtangqiaoboy/iOS-Protangqiaoboy/iOS-QR-Code-Generatortangqiaoboy/iOS5ViewCtrlerSampletangqiaoboy/iOSBlogCNtangqiaoboy/iOSSFtangqiaoboy/iphone-apptangqiaoboy/iRubytangqiaoboy/juzhaitangqiaoboy/KVO_Sampletangqiaoboy/LTBlacklisttangqiaoboy/MultiLayerNavigationtangqiaoboy/newsyctangqiaoboy/octopresstangqiaoboy/quotation.github.iotangqiaoboy/Ready2Rocktangqiaoboy/spf13-vimtangqiaoboy/SynchronizedUIActionSheetDemotangqiaoboy/tangqiaoboy.github.comtangqiaoboy/the-swift-programming-language-in-chinesetangqiaoboy/TopWindowSample

是不是超簡單??這里默認(rèn)的是第一頁,每頁三十條,當(dāng)然了,你可以通過下面的方法給改變頁數(shù),或者每頁的條數(shù)。

//獲取到了tangqiao用戶? ? ? ? ? ? ? ? //獲取這個用戶的所有公開倉庫? ? ? ? ? ? ? ? user.yy_repos.page(2, per_page: 1).subscribeNext({ (repos) -> Void in? ? ? ? ? ? ? ? ? ? for repo in repos{? ? ? ? ? ? ? ? ? ? ? ? print(repo.full_name)? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? })? ? ? ? ? ? ? ?

簡單到令人發(fā)指?。。。?/p>

Actionable

這個類其實就是為了處理那些返回Bool的請求。

直接上例子吧。還是接著上面的?,F(xiàn)在我有了tangqiaoboy的倉庫模型YYRepository的實例,我想star。怎么star??

下面對剛剛獲取的倉庫列表的第一個進(jìn)行star!簡單:

RxGitHubAPI.yy_user("tangqiaoboy").subscribe { (user) -> Void in

switch user{

case .Next(let user):print(user.login)

//獲取到了tangqiao用戶

//獲取這個用戶的所有公開倉庫

user.yy_repos.page(2, per_page: 1).subscribeNext({ (repos) -> Void in

repos[0].action_star.subscribeNext({ (isSuccess) -> Void in

if isSuccess{print("您關(guān)注成功啦!") } }) })

case.Completed:print("completed")

case .Error:print("error") } }

是不是很簡單方便??還有很多工作為完成,后面的開發(fā)估計要等到年后了。大家沒事就手賤star吧!給我點動力哈??!

具體怎么使用,提供哪些功能,歡迎大家去GitHub查看GitHub地址

也歡迎大家去新浪微博?給我發(fā)私信

感謝大家!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,983評論 25 709
  • 01-常量與變量 學(xué)習(xí)swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔閱讀 5,371評論 2 19
  • 今天古典老師的“超級個體”講到了踐行幸福的部分。他說到提升幸福有三個方法:1.感恩;心懷感恩之心,不管遇到發(fā)生的...
    闌十三閱讀 377評論 2 12
  • 臨摹張小進(jìn)的畫
    木南_1982閱讀 243評論 2 7

友情鏈接更多精彩內(nèi)容