精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>數值算法/人工智能>

關于RxSwift的簡要分析

大小:0.4 MB 人氣: 2017-10-12 需要積分:1
 去年整整一年,我都在試圖理解響應式編程的原理是什么,并且試圖驗證如果在我的App中使用這種編程范式是否會帶來好處。于是,我查詢了許多相關的解決方案,從 ReactiveCocoa& Objective-C 開始,及其 Swift 版本 ReactiveCocoa with Swift,再到我朋友實現的一個輕量級的框架 VinceRP。上述這些都是令人贊嘆不已的項目,ReactiveCocoa 的項目成熟度非常高,但是十分復雜;而VinceRP的實現非常容易,所以理解起來非常簡單。
  在學習的過程中,我寫了一系列關于我學習響應式編程的經歷的文章,所以經常會被讀者問到一些關于 RxSwift的問題。慚愧地說,我還從沒有使用RxSwift來編寫一個項目。實際上我還從來沒用過任何語言的 Rx框架,所以我一直認為,對于那些曾在別的開發環境中有使用Rx經歷的人來說,理解RxSwift是非常容易的。既然如此,我也是時候來嘗試一把了。
  Rx
  Rx是最常使用的一個響應式編程框架。它與其他RP框架的一大不同是它的跨平臺特性,同時,它有著最大的開源社區,無數的文檔以及有參考價值的問題討論,許許多多的人不斷地對其進行改進。
  Swift
  這門語言在去年一年中飛速的成長,并且現在也進行了開源了。一些像RxSwift之類的項目也隨著其一起成長。因此,現在已經沒有什么理由可以再阻止你去使用Swift這項技術了。當然,一些重大的改動仍然被列在radar上,但它們很可能在短時間內不會被解決,這就意味著這個項目會不斷地被改進,這不是很好嗎?
  使用 RxSwift 開發一個App
  如果你曾閱讀過我的博客,可能你現在會猜我使用RxSwift開發了一個App。沒錯,你是對的。這是個很耗時的習慣,但是我不喜歡依賴于一個理想的環境,所以通常我都會寫一個例子來讓我有那么一點感覺。通過這種方式,我可以很好理解如何讓框架為我工作,而不是我為它工作。這里我想說一點個人感受,對于解決問題來說,你所選用的框架只是萬千可用方案中的一種,因此,方案的選擇是因人而異的。而這些選擇所帶來的多樣性,正是我如此熱愛編程的一大原因。
  我所寫的這個應用名叫 iCopyPasta,是一個在去年Functional Swift Conf上展示的Mac剪貼板應用 CopyPasta的iOS姐妹版。顯而易見,它們并不是一個完整的產品所以并不可以被用來上架。我現在每天都使用Mac版本的CopyPasta,但是我可能存在某些偏見。我的計劃是將來會發布Mac版本和iOS版本的CopyPasta應用,并可能會將這兩個版本進行打通。
  難道這不是我一直以來的計劃嗎?
  Observables
  我首先對 UIPasteboard開啟監聽,這些監聽會對你拷貝東西時出現在 UIPasteboard 中的字符串和圖像類型進行觀測。
  let pasteboard = NSNotificationCenter.defaultCenter().rx_notification(“UIPasteboardChangedNotification”, object: nil) _ = pasteboard.map { [weak self] (notification: NSNotification) -》 PasteboardItem? in if let pb = notification.object as? UIPasteboard { if let string = pb.valueForPasteboardType(kUTTypeUTF8PlainText as String) { return self?.pasteboardItem(string) } if let image = pb.valueForPasteboardType(kUTTypeImage as String) { return self?.pasteboardItem(image) } } return nil }
  之前我的方法是直接對UIPasteboard中的字符串和圖像直接進行觀察,但是這個方法是不穩妥的。原因在于UIPasteboard可能不是一個KVO安全的類型(具體請看下方的評論)。參考別人的建議后,我使用RxSwift另一個非常棒的特性rx_notification來監聽UIPasteboardChangedNotification
  .subscribeNext { [weak self] pasteboardItem in if let item = pasteboardItem { self?.addPasteboardItem(item) } }
  這里的pasteboard是一個Observable《NSNotification》,這也是為什么可以很容易得訂閱其.Next事件同時相應地去更新tableView。而map則是從監聽到的通知所涉及的對象中獲取字符串或者圖像,并將獲取到的結果轉換成PasteboardItem。
  Dispose bags
  訂閱信號會產生Disposable。如果不終止訂閱,那么這些生成的Disposable將會一直存在,這無疑是非常耗內存的。所以,你要么對這些訂閱調用dispose,要么你可以像我一樣,使用dispose bags來自動銷毀相關的訂閱。
  .addDisposableTo(disposeBag)
  UIKit/Appkit bindings
  你可以很容易地通過rx_itemsWithCellIdentifier將Observable序列綁定到table view上。element來自于我定義的PasteboardItem枚舉類型,這也是為什么我會采用Switch來處理這個對象,這樣可以根據其具體的枚舉值來顯示不同的樣式。
  pasteViewModel.pasteboardItems() .bindTo(tableView.rx_itemsWithCellIdentifier(“pasteCell”, cellType: UITableViewCell.self)) { (row, element, cell) in switch element { case .Text(let string): cell.textLabel?.text = String(string) case .Image(let image): cell.imageView?.image = image }.addDisposableTo(disposeBag)
  另外一個很棒的補充是rx_modelSelected。你可以通過它來獲取你觸發選擇事件時對應的element。簡單來說,它是一個對tableView:didSelectRowAtIndexPath:的封裝,可以將代碼變得非常簡潔。
  tableView .rx_modelSelected(PasteboardItem) .subscribeNext { [weak self] element in self?.pasteViewModel.addItemsToPasteboard(element) }.addDisposableTo(disposeBag)
  你可以通過如下鏈接來查看所以關于 UIKit/AppKit(RxCocoa)的擴展RxSwift’s GitHub。
  總體感受
  到目前為止,我還只是探索了 RxSwift 能力的一小部分,但是我已經感受到 RxSwift 是一個非常棒的框架。如果能夠更深入理解它的機制并學會基于它的設計思路進行思考,那肯定會更好。
  我非常喜歡一些像 Rx.playground,RxMarbles這樣的資料及 great community這樣的社區。這些資料給了我很多的靈感,所以我也樂于將我的學習經驗分享給 bitrise.io的用戶。還有一些比較重要的內容,比如schedulers還未被涉及,但是絕對值得研究一番。
  對我來說,我還需要一段時間來更好地理解 Rx。與我嘗試 ReactiveCocoa 只有個把小時不同,我現在可以每天都在工作中使用 RxSwift,并且堅持使用超過了一年。這都得感謝在 Prezi 的伙伴們。
  作為一個曾經學習過 ReactiveCocoa 的人來說,我現在更傾向于使用 RxSwift,可能是因為我現在自認為已經對于 RxSwift 已經足夠了解,并且使用它可以很快得完成我的編碼任務。當然,在將來我可能會同時使用兩者,但是我認為對于兩者之間任一框架的熟練使用不代表會在學習另外一個框架的時候給你帶來很大的優勢。它們在幾個方面有著不同。同時,這兩個框架(概括來說應該是所有的響應式編程框架)都有著陡峭的學習曲線。對于我來說,我已經度過了學習 ReactiveCocoa 最難的那段時光,但如果你是一個初學者,我建議你自己動手嘗試這兩種框架,甚至更多。
  深入閱讀
  如果你還在思考應該使用哪個響應式編程的框架,那么我建議你去讀一讀 Ash Furrow 所寫的關于如何挑選響應式編程框架的文章。
  你也可以看看其他一些在 iOS 中使用響應式編程的視頻及文章,這些內容都非常得棒,相信你會受益匪淺。
?

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

關于RxSwift的簡要分析下載

相關電子資料下載

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?