{"id":4442,"date":"2022-02-17T22:41:43","date_gmt":"2022-02-17T14:41:43","guid":{"rendered":"https:\/\/1989lifejourney.com\/?p=4442"},"modified":"2022-02-17T22:41:43","modified_gmt":"2022-02-17T14:41:43","slug":"rxswift%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"https:\/\/1989lifejourney.com\/?p=4442","title":{"rendered":"RxSwift\u4f7f\u7528"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"\u4ee5\u4e0b\u8cc7\u6599\u53c3\u8003\u81earef-\u9019\u88e1\u50c5\u4f5c\u500b\u4eba\u5b78\u7fd2\u6574\u7406\"><strong>\u4ee5\u4e0b\u8cc7\u6599\u53c3\u8003\u81ea<a href=\"https:\/\/ithelp.ithome.com.tw\/articles\/10237162\">Ref<\/a>\uff0c\u9019\u88e1\u50c5\u4f5c\u500b\u4eba\u5b78\u7fd2\u6574\u7406<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Rx\u7684\u4e00\u500b\u6838\u5fc3\u89c0\u5ff5\u5c31\u662fobservable\uff08\u6216\u53ebsequence \uff09\uff0c\u53e3\u8a23\u5c31\u662f\uff0cEverything is a SEQUENCE\uff0c\u5927\u610f\u5c31\u662f\u5728Rx\u7684\u4e16\u754c\uff0c\u90fd\u662f\u7531observable\u69cb\u6210\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Observable\u7684\u751f\u547d\u9031\u671f:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u4f7f\u7528.subscribe\u4f86\u8a02\u95b1Observable<\/li><li>\u7576\u8a02\u95b1\u8005\u6536\u5230Observable\u767c\u51fa\u7684.next\u3001.error\u3001.completed\u4e8b\u4ef6\u6642\uff0c\u6703\u4f9d\u64da\u6211\u5011\u5b9a\u7fa9\u597d\u7684\u7a0b\u5f0f\u57f7\u884c<\/li><li>Dispose<br>Note:<br>\u7576\u6211\u5011subscribe()\u6642\uff0c\u5c31\u6703\u7522\u751f\u4e00\u500bDisposable\uff0c\u7576\u4eca\u5929deinit\u6642\uff0cObservable\u537b\u9084\u6c92\u7d50\u675f\uff0c\u9019\u6642\u88dd\u5728DisposeBag\u4e2d\u7684\u6240\u6709Disposable\u5c31\u6703\u57f7\u884cdispose()\uff0c\u85c9\u6b64\u4f86\u91cb\u653e\u8cc7\u6e90<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5efa\u7acbObservable\u65b9\u5f0f:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>.of<\/li><li>.interval<\/li><li>.just<\/li><li>.from<\/li><li>.never (p.s. \u4e0d\u6703\u767c\u9001\u4e5f\u4e0d\u6703\u7d50\u675f\u7684Observable)<\/li><li>.empty (p.s. \u53ea\u6703\u767c\u9001.completed\u7684Observable)<\/li><li>.error (p.s. \u53ea\u6703\u767c\u9001.error\u7684Observable\uff0c\u5728\u6e2c\u8a66\u7684\u6642\u5019\u6bd4\u8f03\u5e38\u7528\u5230\u3002)<\/li><li>.create (p.s. \u63d0\u4f9b\u4f60\u5ba2\u88fd\u5316Observable\u65b9\u5f0f)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Subject:<br><\/strong>\u4ed6\u540c\u6642\u662fObservable\u8ddfObserver<br>Note:<br>\u7591\u554f: \u70ba\u4ec0\u9ebc\u9700\u8981\u300cSubject\u300d? \u55ae\u7d14\u662f\u70ba\u4e86\u65b9\u4fbf\u7c21\u5316code??<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Subject\u7a2e\u985e?:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>PublishSubject (p.s. \u958b\u59cb\u662f\u7a7a\u7684\uff0c\u53ea\u6703\u767c\u9001\u65b0\u7684\u5143\u7d20\u7d66\u8a02\u95b1\u8005)<\/li><li>BehaviorSubject (p.s. \u5b83\u5b9a\u7fa9\u662f\u300e\u958b\u59cb\u662f\u9810\u8a2d\u503c\uff0c\u767c\u9001\u76ee\u524d\u7684\u6700\u5f8c\u4e00\u500b\u503c\u7d66\u8a02\u95b1\u8005\u300f\uff0c\u4e5f\u5c31\u662f\u8aaa\u4f60\u4e0d\u7ba1\u4ec0\u9ebc\u6642\u5019\u8a02\u95b1\uff0c\u90fd\u6703\u6709\u5143\u7d20\u53ef\u4ee5\u6536\u5230\uff08\u81f3\u5c11\u6709\u9810\u8a2d\u503c\uff09\u3002)<\/li><li>ReplaySubject (p.s. \u958b\u59cb\u6642\u7d66\u8a02\u4e00\u500b\u66ab\u5b58\u5927\u5c0f\uff08buffer size\uff09\uff0c\u767c\u9001\u6642\u6703\u5c07\u6700\u5f8c\u7684n\u500b\u5143\u7d20\u5b58\u9032\u66ab\u5b58\uff0c\u4e26\u5c07\u66ab\u5b58\u7684\u5143\u7d20\u767c\u7d66\u8a02\u95b1\u8005)<\/li><li>AsyncSubject\uff08\u9019\u5f88\u5c11\u7528\u5230\uff0c\u5c31\u4e0d\u63d0\u4e86\uff09<\/li><li>PublishRelay (p.s. \u53ea\u63a5\u53d7.next\u4e8b\u4ef6\uff0c\u4e0d\u63a5\u53d7.error\u6216.completed. Note: \u5f9esource code\u4f86\u770b\uff0cPublishRelay\u5176\u5be6\u5c31\u662fPublishSubject\u518d\u5305\u4e00\u5c64)<\/li><li>BehaviorRelay(p.s. \u53ea\u63a5\u53d7.next\u4e8b\u4ef6\uff0c\u4e0d\u63a5\u53d7.error\u6216.completed. Note: \u5f9esource code\u4f86\u770b\uff0cBehaviorRelay\u5176\u5be6\u5c31\u662fBehaviorSubject\u518d\u5305\u4e00\u5c64)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6ce8\u610f\u4e8b\u9805:<br><\/strong>\u4f60\u6703\u767c\u73fe\uff0cSubject\u5728\u540c\u500bclass\u6216\u662f\u4e0d\u540cclass\u88ab\u5230\u8655\u88abonNext()\uff0cRelay\u88ab\u5230\u8655.accept()\uff0c\u9019\u6a23\u6211\u5011\u53c8\u56de\u5230Imperative\u601d\u7dad\uff0c\u4e26\u4e14\u5728Imperative\u4e0a\u5305\u4e00\u5c64\u7684\u611f\u89ba\uff0c\u53cd\u800c\u66f4\u4e0d\u8212\u670d\uff0c\u5beb\u4e45\u4e86\u6703\u5f88\u4e82\uff0c\u4e5f\u6703\u5e38\u5e38\u51fa\u932f\u3002<br>EX:<br>Observable<br>.subscribe(onNext: {<br>observerA.onNext(\u2026)<br>observerB.onNext(\u2026)<br>observerC.onNext(\u2026)<br>})<br>.disposed(by: disposeBag)<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">#<\/h6>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Filtering Observables:<br><\/strong>\u4f7f\u7528\u7bc4\u4f8b:<br>Observable.of(1, 2, 3, 4, 5)<br>.debug(&#8220;A&#8221;)<br>.filter { $0 % 2 == 1 }<br>.debug(&#8220;B&#8221;)<br>.subscribe()<br>.disposed(by: disposeBag)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8aaa\u660e\uff1a<br><\/strong>\u53ea\u6709\u6eff\u8db3closure\u5167\u689d\u4ef6\u7684\u5143\u7d20\u624d\u6703\u88ab\u57f7\u884c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Skip Observables:<br>\u300cskip\u300d\u4f7f\u7528\u7bc4\u4f8b:<br><\/strong>Observable.of(1, 2, 3, 4, 5)<br>.skip(2)<br>.debug(&#8220;B&#8221;)<br>.subscribe()<br>.disposed(by: disposeBag)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8aaa\u660e\uff1a<br><\/strong>\u7565\u904e\u524d\u5169\u500b\u5143\u7d20(i.e. 1, 2)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u300cskipWhile\u300d\u4f7f\u7528\u7bc4\u4f8b:<br><\/strong>Observable.of(1, 3, 5, 6, 7)<br>.skipWhile { $0 % 2 == 1 }<br>.debug(&#8220;B&#8221;)<br>.subscribe()<br>.disposed(by: disposeBag)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8aaa\u660e:<br><\/strong>\u7565\u904e\u7b26\u5408\u689d\u4ef6\u7684\u5143\u7d20\uff0c\u76f4\u5230\u9047\u5230\u4e0d\u7b26\u5408\u689d\u4ef6\u7684\u5143\u7d20\uff08\u5373 false\uff09\uff0c\u5c31\u505c\u6b62\u7565\u904e<br>p.s. \u7bc4\u4f8b\u4e2d\u76841, 3, 5, 6, 7\uff0c\u53ea\u67096\u548c7\u6703\u57f7\u884c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u300cskipUntil\u300d\u4f7f\u7528\u7bc4\u4f8b:<br><\/strong>let subject = PublishSubject()<br>let trigger = PublishSubject()<br>subject<br>.skipUntil(trigger)<br>.debug(&#8220;B&#8221;)<br>.subscribe()<br>.disposed(by: disposeBag)<br>subject.onNext(&#8220;1&#8221;)<br>subject.onNext(&#8220;2&#8221;)<br>trigger.onNext(())<br>subject.onNext(&#8220;3&#8221;)<br>subject.onNext(&#8220;4&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u8aaa\u660e:<br><\/strong>\u5b9a\u7fa9\u300e\u7565\u904e\u5143\u7d20\uff0c\u76f4\u5230\u53e6\u4e00\u500bObservable\u767c\u9001\u5143\u7d20\uff0c\u5c31\u505c\u6b62\u7565\u904e\u300f\uff0c\u8ddf\u524d\u9762\u5169\u7a2e\u76f8\u6bd4\uff0c\u524d\u9762\u5169\u7a2e\u662f\u975c\u614b\u7684\u8a2d\u5b9a\u904e\u6ffe\u689d\u4ef6\uff0cskipUntil\u5247\u662f\u53ef\u4ee5\u57fa\u65bc\u53e6\u4e00\u500bObservable \u53bb\u52d5\u614b\u904e\u6ffe\u5143\u7d20\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Take Observables:<br><\/strong>take\u8ddfskip\u5c31\u662f\u76f8\u53cd\u7684\u5b58\u5728\uff0c\u524d\u8005\u662f\u53d6\u7684n\u500b\u5143\u7d20\uff0c\u5f8c\u8005\u662f\u7565\u904en\u500b\u5143\u7d20\uff0c\u540c\u6a23\u7684\uff0c\u5b83\u4e5f\u6709takeWhile\u8ddftakeUntil\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>DistinctUntilChanged:<br><\/strong>\u5b9a\u7fa9\u300e\u6392\u9664\u91cd\u8907\u7684\u5143\u7d20\uff0c\u76f4\u5230\u4e0d\u662f\u91cd\u8907\u6642\uff0c\u624d\u6703\u767c\u51fa\u300f\uff0c\u6bd4\u5982\u4e0b\u65b9\u7bc4\u4f8b\uff0c\u7576true\u8f49false\u6642\u624d\u6703\u767c\u9001\u5143\u7d20<br>\u4f7f\u7528\u7bc4\u4f8b:<br>Observable.of(true, true, false, false, true, false)<br>.distinctUntilChanged()<br>.debug(&#8220;B&#8221;)<br>.subscribe()<br>.disposed(by: disposeBag)<br>\u57f7\u884c\u7d50\u679c:<br>B -&gt; subscribed<br>B -&gt; Event next(true)<br>B -&gt; Event next(false)<br>B -&gt; Event next(true)<br>B -&gt; Event next(false)<br>B -&gt; Event completed<br>B -&gt; isDisposed<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u4e0b\u8cc7\u6599\u53c3\u8003\u81eaRef\uff0c\u9019\u88e1\u50c5\u4f5c\u500b\u4eba\u5b78\u7fd2\u6574\u7406 Rx\u7684\u4e00\u500b\u6838\u5fc3\u89c0\u5ff5\u5c31\u662fobservable\uff08\u6216\u53ebsequence  [&hellip;]<\/p>\n","protected":false},"author":139426785,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_postgate_lock_override":"inherit","_postgate_lock_mode":"inherit","_postgate_preview_mode":"inherit","_postgate_preview_limit":0,"_postgate_product_ids":[],"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[37324612,373736456,1],"tags":[],"post_folder":[],"class_list":["post-4442","post","type-post","status-publish","format-standard","hentry","category-ios-development","category-rxswift","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/paR5vw-19E","jetpack-related-posts":[{"id":4431,"url":"https:\/\/1989lifejourney.com\/?p=4431","url_meta":{"origin":4442,"position":0},"title":"Getting started with RxSwift","author":"Kevin","date":"16 2 \u6708, 2022","format":false,"excerpt":"\u4ee5\u4e0b\u8cc7\u6599\u53c3\u8003\u81eaRef\uff0c\u9019\u88e1\u50c5\u4f5c\u500b\u4eba\u5b78\u7fd2\u6574\u7406 Definition of ReactiveXAdvan\u2026","rel":"","context":"\u5728\u300cIOS Development\u300d\u4e2d","block_context":{"text":"IOS Development","link":"https:\/\/1989lifejourney.com\/?cat=37324612"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4594,"url":"https:\/\/1989lifejourney.com\/?p=4594","url_meta":{"origin":4442,"position":1},"title":"RxSwift\u6574\u7406","author":"Kevin","date":"25 2 \u6708, 2022","format":false,"excerpt":"RxSwift Definition:Use concept of Observer pattern\u2026","rel":"","context":"\u5728\u300cIOS Development\u300d\u4e2d","block_context":{"text":"IOS Development","link":"https:\/\/1989lifejourney.com\/?cat=37324612"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6444,"url":"https:\/\/1989lifejourney.com\/?p=6444","url_meta":{"origin":4442,"position":2},"title":"RxSwift\u5b78\u7fd2\u91cd\u9ede\u6574\u7406","author":"Kevin","date":"11 1 \u6708, 2023","format":false,"excerpt":"RxSwift\u5b78\u7fd2\u91cd\u9ede: \u4e0d\u53ef\u5fd8\u8a18\u7684\u524d\u63d0: \u4e8b\u4ef6\u662f\u5728\u54ea\u4e00\u689dthread\u4e0a\u57f7\u884c(ex: main th\u2026","rel":"","context":"\u5728\u300cIOS Development\u300d\u4e2d","block_context":{"text":"IOS Development","link":"https:\/\/1989lifejourney.com\/?cat=37324612"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":16575,"url":"https:\/\/1989lifejourney.com\/?p=16575","url_meta":{"origin":4442,"position":3},"title":"Senior\/Junior\/AI coding\u5dee\u7570\u5206\u6790 (AI\u6574\u7406)","author":"Kevin","date":"2 9 \u6708, 2026","format":false,"excerpt":"Junior \u5728\u5b8c\u6210\u65b9\u6848\u3002AI \u5728\u751f\u6210\u65b9\u6848\u3002Senior \u5728\u4ef2\u88c1\u65b9\u6848\uff0c\u5fc5\u8981\u6642\u9023\u300c\u554f\u984c\u539f\u672c\u662f\u600e\u9ebc\u88ab\u5b9a\u7fa9\u2026","rel":"","context":"\u985e\u4f3c\u6587\u7ae0","block_context":{"text":"\u985e\u4f3c\u6587\u7ae0","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5858,"url":"https:\/\/1989lifejourney.com\/?p=5858","url_meta":{"origin":4442,"position":4},"title":"IOS data binding","author":"Kevin","date":"5 9 \u6708, 2022","format":false,"excerpt":"\u4ee5\u4e0b\u8cc7\u6599\u7686\u4f86\u81ea[Ref 1]\uff0c\u9019\u88e1\u50c5\u4f5c\u500b\u4eba\u7b46\u8a18\u6574\u7406: Data Binding is simply \u2026","rel":"","context":"\u5728\u300cIOS Development\u300d\u4e2d","block_context":{"text":"IOS Development","link":"https:\/\/1989lifejourney.com\/?cat=37324612"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11512,"url":"https:\/\/1989lifejourney.com\/?p=11512","url_meta":{"origin":4442,"position":5},"title":"2025\/2\/8 \u4e5d\u4efd\u91d1\u74dc\u77f3\u534a\u65e5\u904a","author":"Kevin","date":"1 3 \u6708, 2025","format":false,"excerpt":"\u5f9e\u5fe0\u5b5d\u5fa9\u82082\u865f\u51fa\u53e3\u65c1\u7684\u516c\u8eca\u7ad9\u724c\u51fa\u767c\uff0c\u67091062\u516c\u8eca\u53ef\u4ee5\u524d\u5f80\u4e5d\u4efd\u3002 p.s. 965\u516c\u8eca\u4e5f\u53ef\u4ee5\u5230\u4e5d\u4efd\uff0c\u2026","rel":"","context":"\u5728\u300cTravel\u300d\u4e2d","block_context":{"text":"Travel","link":"https:\/\/1989lifejourney.com\/?cat=200"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/1989lifejourney.com\/wp-content\/uploads\/2025\/03\/IMG_8752-1.jpeg?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/posts\/4442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/users\/139426785"}],"replies":[{"embeddable":true,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4442"}],"version-history":[{"count":2,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/posts\/4442\/revisions"}],"predecessor-version":[{"id":4444,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=\/wp\/v2\/posts\/4442\/revisions\/4444"}],"wp:attachment":[{"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4442"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/1989lifejourney.com\/index.php?rest_route=%2Fwp%2Fv2%2Fpost_folder&post=4442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}