{"id":278173,"date":"2016-04-13T03:20:04","date_gmt":"2016-04-12T23:20:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=278173"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=278173","title":{"rendered":"RxSwift \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u043f\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c (+ PDF)"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/412\/1ee\/057\/4121ee0577d34944969a7512a4e92172.png\"\/><\/p>\n<p>  \u0417\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0442\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0432\u0441\u0442\u0430\u043b \u043d\u0430 \u0440\u0430\u0441\u043f\u0443\u0442\u044c\u0435, \u2014 \u043a\u0430\u043a\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f. ReactiveCocoa \u2014 \u0432\u0435\u0442\u0435\u0440\u0430\u043d \u0432 iOS \u043a\u0440\u0443\u0433\u0430\u0445, \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u0434\u043e\u0432\u043e\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u043e \u043e\u043d \u0432\u044b\u0440\u043e\u0441 \u0441 Objective-C, \u0438 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0438\u0448\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 Swift, \u2014 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0448\u0435\u043a \u044f\u0437\u044b\u043a\u0430. RxSwift \u0436\u0435 \u043f\u043e\u0440\u0442 Reactive Extensions, \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043b\u0433\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043d\u043e \u0441\u0430\u043c \u043f\u043e\u0440\u0442 \u0441\u0432\u0435\u0436\u0438\u0439 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434 Swift. \u041d\u0430 \u043d\u0435\u043c \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.<br \/>  \u041d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e RxSwift \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 <a href=\"http:\/\/reactivex.io\/\">reactivex.io<\/a>, \u0430 \u0442\u0430\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0440\u0443\u043a\u0438 \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438 \u0435\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f RxSwift, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043c\u0435\u044e\u0442 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0435\u0441\u0442\u044c \u0442\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f. <br \/>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0432\u0441\u0435 \u0433\u043b\u0430\u0432\u044b \u0432\u0438\u043a\u0438 \u0441 RxSwift \u0433\u0438\u0442\u0445\u0430\u0431\u0430, \u044f \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u0442\u0443\u0442 \u0442\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0441 RX \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0442, \u043d\u0443\u0436\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u044b, \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0448\u044c \u043a\u0430\u043a \u043c\u0430\u0440\u0442\u044b\u0448\u043a\u0430 \u0441 <s>\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u043c<\/s> \u0433\u0440\u0430\u043d\u0430\u0442\u043e\u0439. \u042f \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u0442\u043e\u043c \u0442\u0435, \u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b, \u043d\u043e \u0437\u0430\u0434\u0430\u0432 \u0441\u0435\u0431\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u043d\u0438\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043b\u0438\u0448\u044c \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 \u0442\u043e \u043a\u0430\u043a \u0432\u0435\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043d\u043e \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d.<br \/>  \u0412 \u043e\u0431\u0449\u0435\u043c \u043d\u0438\u0447\u0442\u043e\u0436\u0435 \u0441\u0443\u043c\u043d\u044f\u0448\u0435\u0441\u044f \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b RxSwift. \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0447\u0442\u043e \u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0417\u0430\u0442\u0435\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0441\u0445\u0435\u043c\u044b, \u043d\u0443 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0431\u043e\u0442\u0443, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0433\u0440\u0435\u0445 \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0441 \u0442\u0435\u043c, \u043a\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043c\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  <b>\u041c\u043d\u043e\u0433\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c, \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e!<\/b><br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/ReactiveX\/RxSwift\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a>, \u0443 \u043c\u0435\u043d\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0443\u0442\u044c \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 RxSwift \u043a\u043e\u043c\u0430\u043d\u0434, \u0430 \u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u044b.<br \/>  \u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u00ab\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u0448\u0430\u0440\u0438\u043a\u0430\u043c\u0438 \u0432 \u0441\u0445\u0435\u043c\u0430\u0445, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <a href=\"http:\/\/rxmarbles.com\/\">RxMarbles<\/a>, \u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0434 <a href=\"https:\/\/itunes.apple.com\/ru\/app\/rxmarbles\/id1087272442?mt=8\">iPhone\/iPad<\/a><\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0432\u0441\u0435 (\u043d\u0443 \u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435) \u043a\u043e\u043c\u0430\u043d\u0434\u044b RxSwift, \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044f \u0434\u0430\u043c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u0441\u0445\u0435\u043c\u0443(\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b), \u043a\u043e\u0434, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043f\u043e \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430. <br \/>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0442.\u043a. \u044f \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0446\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c.<\/p>\n<p>  \u0412\u043e\u0442 <a href=\"https:\/\/github.com\/sparklone\/RxSwift\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431<\/a>, \u043a\u0443\u0434\u0430 \u044f \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 RxSwift, \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0432\u043e\u044e \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443 (DescribeOperators.playground), \u0433\u0434\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434, \u0447\u0442\u043e \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<br \/>  \u0410 \u0432\u043e\u0442 \u0438 <a href=\"https:\/\/github.com\/sparklone\/RxSwift\/blob\/master\/RXSwift%20operators.pdf\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430 PDF<\/a> \u0433\u0434\u0435 \u0432 \u0432\u0438\u0434\u0435 mindMap \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445 \u0432\u0441\u0435. \u041a\u0443\u0441\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430 \u0432 PDF \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e PDF \u044f \u0432\u0441\u0435 \u0438 \u0437\u0430\u0442\u0435\u044f\u043b \u2014 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0432\u0438\u0434\u043d\u044b \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u0438\u0445 \u0441\u0445\u0435\u043c\u0430\u043c\u0438. PDF \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c (\u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0430 \u043d\u0435 \u0432\u0435\u0441\u0430), \u043d\u043e \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0434\u0430\u0436\u0435 \u043d\u0430 iPad 2 \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041e\u0431\u043e \u0432\u0441\u0435\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u0438\u0447\u043a\u0443, \u043e\u0431\u044a\u0435\u043c \u0440\u0430\u0431\u043e\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u0435\u043b\u0438\u043a\u043e\u0432\u0430\u0442, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0432\u044b\u0447\u0438\u0442\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043c\u043e\u0438 \u0433\u043b\u0430\u0437\u0430 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u043a\u043b\u044f\u043b\u0438.<br \/>  \u0427\u0442\u043e \u0436, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043a\u043e\u043c\u0443 \u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<h1>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h1>\n<p>  <a href=\"#Intro\">\u0417\u0430\u043c\u0435\u0442\u043a\u0438<\/a><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Observable<\/h2>\n<p>  <a href=\"#asObservable\">asObservable<\/a><br \/>  <a href=\"#create\">create<\/a><br \/>  <a href=\"#deferred\">deferred<\/a><br \/>  <a href=\"#empty\">empty<\/a><br \/>  <a href=\"#error\">error<\/a><br \/>  <a href=\"#interval\">interval<\/a><br \/>  <a href=\"#just\">just<\/a><br \/>  <a href=\"#never\">never<\/a><br \/>  <a href=\"#of\">of<\/a><br \/>  <a href=\"#range\">range<\/a><br \/>  <a href=\"#repeatElement\">repeatElement<\/a><br \/>  <a href=\"#timer\">timer<\/a><\/p>\n<h2>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Observable<\/h2>\n<p>  <a href=\"#amb\">amb<\/a><br \/>  <a href=\"#combineLatest\">combineLatest<\/a><br \/>  <a href=\"#concat\">concat<\/a><br \/>  <a href=\"#merge\">merge<\/a><br \/>  <a href=\"#startWith\">startWith<\/a><br \/>  <a href=\"#switchLatest\">switchLatest<\/a><br \/>  <a href=\"#withLatestFrom\">withLatestFrom<\/a><br \/>  <a href=\"#zip\">zip<\/a><\/p>\n<h2>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f<\/h2>\n<p>  <a href=\"#distinctUntilChanged\">distinctUntilChanged<\/a><br \/>  <a href=\"#elementAt\">elementAt<\/a><br \/>  <a href=\"#filter\">filter<\/a><br \/>  <a href=\"#ignoreElements\">ignoreElements<\/a><br \/>  <a href=\"#sample\">sample<\/a><br \/>  <a href=\"#single\">single<\/a><br \/>  <a href=\"#skip\">skip<\/a><br \/>  <a href=\"#skipDuration\">skip (duration)<\/a><br \/>  <a href=\"#skipUntil\">skipUntil<\/a><br \/>  <a href=\"#skipWhile\">skipWhile<\/a><br \/>  <a href=\"#skipWhileWithIndex\">skipWhileWithIndex<\/a><br \/>  <a href=\"#take\">take<\/a><br \/>  <a href=\"#takeDuration\">take (duration)<\/a><br \/>  <a href=\"#takeLast\">takeLast<\/a><br \/>  <a href=\"#takeUntil\">takeUntil<\/a><br \/>  <a href=\"#takeWhile\">takeWhile<\/a><br \/>  <a href=\"#takeWhileWithIndex\">takeWhileWithIndex<\/a><br \/>  <a href=\"#throttle\">throttle<\/a><\/p>\n<h2>\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h2>\n<p>  <a href=\"#buffer\">buffer<\/a><br \/>  <a href=\"#flatMap\">flatMap<\/a><br \/>  <a href=\"#flatMapFirst\">flatMapFirst<\/a><br \/>  <a href=\"#flatMapLatest\">flatMapLatest<\/a><br \/>  <a href=\"#flatMapWithIndex\">flatMapWithIndex<\/a><br \/>  <a href=\"#map\">map<\/a><br \/>  <a href=\"#mapWithIndex\">mapWithIndex<\/a><br \/>  <a href=\"#window\">window<\/a><\/p>\n<h2>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  <a href=\"#reduce\">reduce<\/a><br \/>  <a href=\"#scan\">scan<\/a><br \/>  <a href=\"#toArray\">toArray<\/a><\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438<\/h2>\n<p>  <a href=\"#catchError\">catchError<\/a><br \/>  <a href=\"#catchErrorJustReturn\">catchErrorJustReturn<\/a><br \/>  <a href=\"#retry\">retry<\/a><br \/>  <a href=\"#retryWhen\">retryWhen<\/a><\/p>\n<h2>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Connectable Observable<\/h2>\n<p>  <a href=\"#multicast\">multicast<\/a><br \/>  <a href=\"#publish\">publish<\/a><br \/>  <a href=\"#refCount\">refCount<\/a><br \/>  <a href=\"#reply\">reply<\/a><br \/>  <a href=\"#replayAll\">replayAll<\/a><\/p>\n<h1>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b<\/h1>\n<p>  <a href=\"#debug\">debug<\/a><br \/>  <a href=\"#doOn\">doOn \/ doOnNext<\/a><br \/>  <a href=\"#delaySubscription\">delaySubscription<\/a><br \/>  <a href=\"#observeOn\">observeOn<\/a><br \/>  <a href=\"#subscribe\">subscribe<\/a><br \/>  <a href=\"#subscribeOn\">subscribeOn<\/a><br \/>  <a href=\"#timeout\">timeout<\/a><br \/>  <a href=\"#using\">using<\/a><\/p>\n<p>  <a name=\"Intro\"><\/a><\/p>\n<p>  \u0412 \u0441\u0445\u0435\u043c\u0430\u0445 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>Source\/SO<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <b>Source Observable<\/b>, <b>RO\/Result<\/b> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <b>Result Observable<\/b>.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 createSequenceWithWait, \u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 Observable \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<pre><code>public enum ResultType {     case Infinite     case Completed     case Error }  public func createSequenceWithWait&lt;T, U&gt;(array: [T], waitTime: Int64 = 1, resultType: ResultType = .Completed, describer: ((value: T) -&gt; U)? = nil) -&gt; Observable&lt;U&gt; {     return Observable&lt;U&gt;.create{ observer  in         for (idx, letter) in array.enumerate() {             let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), waitTime * Int64(idx) * Int64(NSEC_PER_SEC))             dispatch_after(time, dispatch_get_main_queue()) {                 if let describer = describer {                     let value = describer(value: letter)                     observer.on(.Next(value))                 } else {                     observer.on(.Next(letter as! U))                 }                              }         }                  if resultType != .Infinite {             let allTime = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), waitTime * Int64(array.count) * Int64(NSEC_PER_SEC))             dispatch_after(allTime, dispatch_get_main_queue()) {                 switch resultType {                 case .Completed:                     observer.onCompleted()                 case .Error:                     observer.onError(RxError.Unknown)                 default:                     break                 }                              }         }                  return NopDisposable.instance     } } <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f example \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0435\u0451 \u043a\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 (\u0432\u0437\u044f\u0442 \u0438\u0437 RxSwift)   <\/p>\n<pre><code>public func example(description: String, action: () -&gt; ()) {     print(&quot;\\n--- \\(description) example ---&quot;)     action() } <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435 \u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c  <\/p>\n<pre><code>import XCPlayground XCPlaygroundPage.currentPage.needsIndefiniteExecution = true <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u043e RxSwift \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041d\u0435 \u0437\u043d\u0430\u044e \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043c\u044b\u0441\u043b \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0432\u0432\u043e\u0434\u043d\u0443\u044e. <\/p>\n<h1>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Observable<\/h1>\n<p>  <\/p>\n<hr\/>\n<p>  <a name=\"asObservable\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/from.html\">asObservable<\/a><\/h3>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 RxSwift, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0432 Observable. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: ControlEvent, ControlProperty, Variable, Driver<\/p>\n<pre><code>example(&quot;as Observable&quot;) {     let variable = Variable&lt;Int&gt;(0)          variable.asObservable().subscribe { e in         print(e)     }     variable.value = 1 } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- as Observable example --- Next(0) Next(1) Completed <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b Variable \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 Observable \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/p>\n<hr\/>\n<p>  <a name=\"create\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/create.html\">create<\/a><\/h3>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Observable \u0441 \u043d\u0443\u043b\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044f \u043a\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code>example(&quot;create&quot;) {     let firstSequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)     let secondSequence = Observable&lt;AnyObject&gt;.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)          let multipleSequence = Observable&lt;Observable&lt;AnyObject&gt;&gt;.create { observer in         observer.on(.Next(firstSequence))         observer.on(.Next(secondSequence))         return NopDisposable.instance     }     let concatSequence = multipleSequence.concat()     concatSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- create example --- Next(1) Next(2) Next(3) Next(A) Next(B) Next(C) <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 Observable \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 Observable, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <b>concat<\/b>, \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f Observable \u043c\u044b \u0438 \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c\u0441\u044f<\/p>\n<hr\/>\n<p>  <a name=\"deferred\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/defer.html\">deferred<\/a><\/h3>\n<p>  \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Observable, \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e subscribe<\/p>\n<pre><code>example(&quot;without deferred&quot;) {     var i = 1     let justObservable = Observable.just(i)     i = 2     _ = justObservable.subscribeNext{ print (&quot;i = \\($0)&quot;) } }  example(&quot;with deferred&quot;) {     var i = 1     let deferredJustObservable = Observable.deferred{         Observable.just(i)     }     i = 2     _ = deferredJustObservable.subscribeNext{ print (&quot;i = \\($0)&quot;) } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- without deferred example --- i = 1  --- with deferred example --- i = 2 <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Observable \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Observable.just(i), \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 i \u0443\u0436\u0435 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e deferred, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 i \u043f\u0435\u0440\u0435\u0434 subscribe<\/p>\n<hr\/>\n<p>  <a name=\"empty\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/empty-never-throw.html\">empty<\/a><\/h3>\n<p>  \u041f\u0443\u0441\u0442\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f Completed<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bab\/247\/35e\/bab24735e0de416792a959cdcd519180.png\"\/><\/p>\n<pre><code>example(&quot;empty&quot;) {     let sequence = Observable&lt;Int&gt;.empty()     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- empty example --- Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"error\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/empty-never-throw.html\">error<\/a><\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0441\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 Error<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b34\/39c\/b51\/b3439cb513de4be9996f48bebfb6aaf3.png\"\/><\/p>\n<pre><code>example(&quot;error&quot;) {     let sequence = Observable&lt;Int&gt;         .error(RxError.Unknown)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- error example --- Error(Unknown error occured.) <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"interval\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/interval.html\">interval<\/a><\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u0441 0 \u0441 \u0448\u0430\u0433\u043e\u043c 1, \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/011\/ba0\/4fd\/011ba04fda0a478c9e0a225fb36748ec.png\"\/><\/p>\n<pre><code>example(&quot;interval&quot;) {     let sequence = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- interval example --- Next(0) Next(1) Next(2) Next(3) Next(4) .... <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"just\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/just.html\">just<\/a><\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f Completed<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0e8\/fac\/44d\/0e8fac44dcb44bbc86a8a0ed452aec7b.png\"\/><\/p>\n<pre><code>example(&quot;just&quot;) {     let sequence = Observable.just(100)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- just example --- Next(100) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"never\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/empty-never-throw.html\">never<\/a><\/h3>\n<p>  \u041f\u0443\u0441\u0442\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0447\u044c\u0438 observer\u2019\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0442.\u0435. \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/503\/a86\/757\/503a867579524903afe5594b3c1fc6dd.png\"\/><\/p>\n<pre><code>example(&quot;never&quot;) {     let sequence = Observable&lt;Int&gt;.never()     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- never example --- <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"of\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/from.html\">of<\/a><\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 variadic \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f Completed<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/962\/355\/837\/96235583734c4667a247f7279f62609c.png\"\/><\/p>\n<pre><code>example(&quot;simple of&quot;) {     let sequence = Observable.of(1, 2)      sequence.subscribe { e in         print(e)     } }  example(&quot;of for Observables&quot;) {     let firstSequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)     let secondSequence = Observable&lt;AnyObject&gt;.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)          let bothSequence = Observable.of(firstSequence, secondSequence)     let mergedSequence = bothSequence.merge()          mergedSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- simple of example --- Next(1) Next(2) Completed  --- of for Observables example --- Next(1) Next(2) Next(3) Next(A) Next(B) Next(C) Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u0435\u043b. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 Observable, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0445 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 merge<\/p>\n<hr\/>\n<p>  <a name=\"range\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/range.html\">range<\/a><\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0443\u044e \u0441 \u0448\u0430\u0433\u043e\u043c 1 \u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0437, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f Completed<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b8c\/645\/c24\/b8c645c248954839b6ba4e6c86a56979.png\"\/><\/p>\n<pre><code>example(&quot;range&quot;) {     let sequence = Observable.range(start: 5, count: 3)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- range example --- Next(5) Next(6) Next(7) Completed <\/code><\/pre>\n<p>  \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 5, 3 \u0440\u0430\u0437\u0430 \u0441 \u0448\u0430\u0433\u043e\u043c 1<\/p>\n<hr\/>\n<p>  <a name=\"repeatElement\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/repeat.html\">repeatElement<\/a><\/h3>\n<p>  \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f Completed \u0438\u043b\u0438 Error<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0e8\/bde\/180\/0e8bde18055743ad87475af402ab60f9.png\"\/><\/p>\n<pre><code>example(&quot;repeatElement&quot;) {     let sequence = Observable.repeatElement(1, scheduler: MainScheduler.instance)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- repeatElement example --- Next(1) Next(2) Next(3) ..... <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"timer\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/timer.html\">timer<\/a><\/h3>\n<p>  \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0430\u044f \u0441 0 \u0441 \u0448\u0430\u0433\u043e\u043c 1, \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f Completed \u0438\u043b\u0438 Error<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f8e\/230\/c64\/f8e230c64e5a4f2999f9fc10eb7b0815.png\"\/><\/p>\n<pre><code>example(&quot;timer&quot;) {     let sequence = Observable&lt;Int64&gt;.timer(2, period: 3, scheduler: MainScheduler.instance)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- timer example --- Next(0) Next(1) Next(2) <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u043d\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043a\u0430\u0436\u0434\u044b\u0435 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/p>\n<h1>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Observable<\/h1>\n<hr\/>\n<p>  <a name=\"amb\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/amb.html\">amb<\/a><\/h3>\n<pre><code>SO = [Observable&lt;T&gt;] \u0438\u043b\u0438 SO1, SO2 = Observable&lt;T&gt; RO = Observable&lt;T&gt; <\/code><\/pre>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 Observable SO \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 SO \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/6e6\/872\/399\/6e68723996bd488a830ffb4b6cf35ea2.png\"\/><\/p>\n<pre><code>example(&quot;amb&quot;) {     let subjectA = PublishSubject&lt;Int&gt;()     let subjectB = PublishSubject&lt;Int&gt;()     let subjectC = PublishSubject&lt;Int&gt;()     let subjectD = PublishSubject&lt;Int&gt;()          let ambSequence = [subjectA, subjectB, subjectC, subjectD].amb()     ambSequence.subscribe { e in         print(e)     }          subjectC.onNext(0)     subjectA.onNext(3)     subjectB.onNext(102)     subjectC.onNext(1)     subjectD.onNext(45) } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- amb example --- Next(0) Next(1) <\/code><\/pre>\n<p>  \u0422.\u043a. \u043f\u0435\u0440\u0432\u044b\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u043b\u0435\u043c\u0435\u043d\u0442 subjectC, \u2014 \u043b\u0438\u0448\u044c \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/p>\n<hr\/>\n<p>  <a name=\"combineLatest\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/combinelatest.html\">combineLatest<\/a><\/h3>\n<pre><code>SO = SO1, SO2,... SON = Observable&lt;T&gt; RO = Observable&lt;f(T,T)&gt;  <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 Observable \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u2014 \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f RO \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u044b\u043c Observable \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0445 Observable<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d1e\/398\/ec4\/d1e398ec43d44c08ab5670293a15d853.png\"\/><\/p>\n<pre><code>example(&quot;combineLatest&quot;) {     let firstSequence = createSequenceWithWait([1,2,3], waitTime: 2) { element in         &quot;\\(element)&quot;     }.debug(&quot;firstSequence&quot;)     let secondSequence = createSequenceWithWait([&quot;A&quot;, &quot;B&quot;, &quot;C&quot;], waitTime: 1) { element in         &quot;\\(element)&quot;         }         .delaySubscription(3, scheduler: MainScheduler.instance)         .debug(&quot;secondSequence&quot;)          let concatSequence = Observable.combineLatest(firstSequence, secondSequence) {         first, second -&gt; String in         &quot;\\(first) - \\(second)&quot;     }     concatSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- combineLatest example --- 2016-04-12 16:59:35.421: firstSequence -&gt; subscribed 2016-04-12 16:59:35.422: secondSequence -&gt; subscribed 2016-04-12 16:59:35.434: firstSequence -&gt; Event Next(1) 2016-04-12 16:59:37.423: firstSequence -&gt; Event Next(2) 2016-04-12 16:59:38.423: secondSequence -&gt; Event Next(A) Next(2 - A) 2016-04-12 16:59:39.423: firstSequence -&gt; Event Next(3) Next(3 - A) 2016-04-12 16:59:39.522: secondSequence -&gt; Event Next(B) Next(3 - B) 2016-04-12 16:59:40.622: secondSequence -&gt; Event Next(C) Next(3 - C) 2016-04-12 16:59:41.722: firstSequence -&gt; Event Completed 2016-04-12 16:59:41.722: firstSequence -&gt; disposed 2016-04-12 16:59:41.722: secondSequence -&gt; Event Completed 2016-04-12 16:59:41.722: secondSequence -&gt; disposed Completed <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043b Observable \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e createSequenceWithWait, \u0447\u0442\u043e\u0431\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<br \/>  firstSequence \u0443\u0441\u043f\u0435\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c 1 \u0438 2, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c secondSequence \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b A, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 1 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b\u0438, \u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0441\u0442\u0430\u043b\u043e <b>2 \u2014 A<\/b><\/p>\n<hr\/>\n<p>  <a name=\"concat\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/concat.html\">concat<\/a><\/h3>\n<pre><code>SO = Observable&lt;Observable&lt;T&gt;&gt; \u0438\u043b\u0438 SO1, SO2 = Observable&lt;T&gt; RO = Observable&lt;T&gt; <\/code><\/pre>\n<p>  \u0412 RO \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e Observable, \u0438 \u043b\u0438\u0448\u044c \u0437\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 Observable \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 Completed, \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 RO. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c Observable \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 RO<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/125\/e09\/b9c\/125e09b9c0df42f39a1792e0192e8b9a.png\"\/><\/p>\n<pre><code>example(&quot;concat object method&quot;) {     let firstSequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)     let secondSequence = Observable&lt;AnyObject&gt;.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)     let concatSequence = firstSequence.concat(secondSequence)     concatSequence.subscribe { e in         print(e)     } }  example(&quot;concat from array&quot;) {     let firstSequence = Observable.of(1,2,3)     let secondSequence = Observable.of(4,5,6)     let concatSequence = Observable.of(firstSequence, secondSequence)         .concat()          concatSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- concat object method example --- Next(1) Next(2) Next(3) Next(A) Next(B) Next(C) Completed  --- concat from array example --- Next(1) Next(2) Next(3) Next(4) Next(5) Next(6) Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 Observable \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443.<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<hr\/>\n<p>  <a name=\"merge\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/merge.html\">merge<\/a><\/h3>\n<pre><code>SO = Observable&lt;Observable&lt;T&gt;&gt; RO = Observable&lt;T&gt; <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b RO \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 Observable \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 Observable<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8c2\/4ab\/2ed\/8c24ab2ed59a41a6afd992e149d2c4fb.png\"\/><\/p>\n<pre><code>example(&quot;simple merge&quot;) {     let firstSequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)     let secondSequence = Observable&lt;AnyObject&gt;.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)      let bothSequence = Observable.of(firstSequence, secondSequence)     let mergedSequence = bothSequence.merge()          mergedSequence.subscribe { e in         print(e)     } }  example(&quot;merge with wait&quot;) {     let firstSequence = createSequenceWithWait([1,2,3]) { element in         &quot;\\(element)&quot;     }     let secondSequence = createSequenceWithWait([&quot;A&quot;, &quot;B&quot;, &quot;C&quot;], waitTime: 2) { element in         &quot;\\(element)&quot;     }      let bothSequence = Observable.of(firstSequence, secondSequence)     let mergedSequence = bothSequence.merge()          mergedSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- simple merge example --- Next(1) Next(2) Next(3) Next(A) Next(B) Next(C) Completed  --- merge with wait example --- Next(1) Next(A) Next(2) Next(3) Next(B) Next(C) Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0441\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 Observable \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0430\u0447\u043d\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d concat<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u0432\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 RO \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043f\u0435\u0440\u0435\u043c\u0435\u0448\u043a\u0443, \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 Observable<\/p>\n<hr\/>\n<p>  <a name=\"startWith\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/startwith.html\">startWith<\/a><\/h3>\n<pre><code>SO = Observable&lt;T&gt; RO = Observable&lt;T&gt; <\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u043e SO \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0c2\/3f3\/479\/0c23f3479a1b453788863898b10126ca.png\"\/><\/p>\n<pre><code>example(&quot;startWith&quot;) {     let sequence = Observable.of(1, 2, 3).startWith(0)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- startWith example --- Next(0) Next(1) Next(2) Next(3) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"switchLatest\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/switch.html\">switchLatest<\/a><\/h3>\n<pre><code>SO = Observable&lt;Observable&lt;T&gt;&gt; RO = Observable&lt;T&gt;  <\/code><\/pre>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 O1 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e SO, \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 Observable \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e Observable \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0442.\u043a. \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 O1, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 O2 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 RO \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043b\u0438\u0448\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e Observable<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/822\/951\/742\/822951742ec64c7396cf8fb92151cbba.png\"\/><\/p>\n<pre><code>example(&quot;switchLatest&quot;) {     let varA = Variable&lt;Int&gt;(0)     let varB = Variable&lt;Int&gt;(100)          let proxyVar = Variable(varA.asObservable())     let concatSequence = proxyVar.asObservable().switchLatest()          concatSequence.subscribe { e in         print(e)     }     varA.value = 1     varA.value = 2     varB.value = 3     proxyVar.value = varB.asObservable()     varB.value = 4     varA.value = 5 }   example(&quot;switchLatest&quot;) {     let observableA = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(10))         }         delay(3) {             observer.on(.Next(20))         }         delay(5) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;oA&quot;)     let observableB = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(100))         }         delay(1) {             observer.on(.Next(200))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;oB&quot;)          let observableC = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(1000))         }         delay(1) {             observer.on(.Next(2000))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;oC&quot;)              let subjects = [observableA, observableB, observableC]         let sequence:Observable&lt;Observable&lt;Int&gt;&gt; = createSequenceWithWait([observableA, observableB, observableC],waitTime:1) {$0}         let switchLatestSequence:Observable&lt;Int&gt; = sequence.switchLatest()         switchLatestSequence.subscribe { e in             print(e)         } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code> --- switchLatest example --- Next(0) Next(1) Next(2) Next(3) Next(4) Completed  --- switchLatest example --- 2016-04-12 17:15:22.710: oA -&gt; subscribed 2016-04-12 17:15:22.711: oA -&gt; Event Next(10) Next(10) 2016-04-12 17:15:23.797: oA -&gt; disposed \/\/ \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f oB 2016-04-12 17:15:23.797: oB -&gt; subscribed 2016-04-12 17:15:23.797: oB -&gt; Event Next(100) Next(100) 2016-04-12 17:15:24.703: oB -&gt; disposed \/\/ \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f oC 2016-04-12 17:15:24.703: oC -&gt; subscribed  2016-04-12 17:15:24.703: oC -&gt; Event Next(1000) Next(1000) 2016-04-12 17:15:25.800: oC -&gt; Event Next(2000) Next(2000) 2016-04-12 17:15:26.703: oC -&gt; Event Completed 2016-04-12 17:15:26.703: oC -&gt; disposed Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043a\u0430\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0441\u0442\u0430\u0442\u0438\u043a\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c Observable.<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0436\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438. observableA, observableB, observableC \u0438\u0437 SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0418\u0445 \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438.<\/p>\n<hr\/>\n<p>  <a name=\"withLatestFrom\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/combinelatest.html\">withLatestFrom<\/a><\/h3>\n<pre><code>SO1, SO2 = Observable&lt;T&gt; RO = Observable&lt;f(T,T)&gt; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e O1 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 O2, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 O1 \u0438 O2 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f RO \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cb8\/c5b\/e5a\/cb8c5be5a30442e7b16e3eac78651a02.png\"\/><\/p>\n<pre><code>example(&quot;withLatestFrom&quot;) {     let varA = Variable&lt;Int&gt;(0)     let varB = Variable&lt;Int&gt;(10)          let withLatestFromSequence = varA.asObservable().withLatestFrom(varB.asObservable()) {         &quot;\\($0) - \\($1)&quot;     }     withLatestFromSequence.subscribe { e in         print(e)     }     varA.value = 1     varA.value = 2      varB.value = 20          varB.value = 30     varA.value = 5     varA.value = 6 } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- withLatestFrom example --- Next(0 - 10) Next(1 - 10) Next(2 - 10) Next(5 - 30) Next(6 - 30) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"zip\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/zip.html\">zip<\/a><\/h3>\n<pre><code>SO = Observable&lt;Observable&lt;T&gt;&gt; RO = Observable&lt;f(T,T)&gt;  <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b RO \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 Observable, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b9f\/a76\/866\/b9fa76866cf64559bb7d1bb024adb35c.png\"\/><\/p>\n<pre><code>example(&quot;zip with simple Variable&quot;) {     let varA = Variable&lt;Int&gt;(0)     let varB = Variable&lt;Int&gt;(10)          let zippedSequence = Observable.zip(varA.asObservable(), varB.asObservable()) { &quot;\\($0) - \\($1)&quot;     }          zippedSequence.subscribe { e in         print(e)     }     varA.value = 1     varA.value = 2     varB.value = 20          varB.value = 30     varA.value = 3     varA.value = 4 }  example(&quot;zip with PublishSubject&quot;) {     let subjectA = PublishSubject&lt;Int&gt;()     let subjectB = PublishSubject&lt;Int&gt;()      let zippedSequence = Observable.zip(subjectA, subjectB) { &quot;\\($0) - \\($1)&quot;     }          zippedSequence.subscribe { e in         print(e)     }     subjectA.onNext(0)     subjectA.onNext(1)     subjectA.onNext(2)     subjectB.onNext(100)     subjectB.onNext(101)     subjectA.onNext(3)     subjectB.onNext(102)     subjectA.onNext(4) } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- zip with simple Variable example --- Next(0 - 10) Next(1 - 20) Next(2 - 30) Completed  --- zip with PublishSubject example --- Next(0 - 100) Next(1 - 101) Next(2 - 102) <\/code><\/pre>\n<p>  \u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 Observable<\/p>\n<h1>\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f<\/h1>\n<hr\/>\n<p>  <a name=\"distinctUntilChanged\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/distinct.html\">distinctUntilChanged<\/a><\/h3>\n<p>  \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f <b>\u043f\u043e\u0434\u0440\u044f\u0434 \u0438\u0434\u0443\u0449\u0438\u0435<\/b> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/383\/8bf\/aba\/3838bfaba1b345069682fd5561e8f24e.png\"\/><\/p>\n<pre><code>example(&quot;distinctUntilChanged&quot;) {     let sequence = Observable.of(1, 2, 2, 3, 4, 4, 4, 1).distinctUntilChanged()     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- distinctUntilChanged example --- Next(1) Next(2) Next(3) Next(4) Next(1) Completed <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u043e\u043d\u043a\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0430 \u043b\u0438\u0448\u044c \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0434\u0440\u044f\u0434.<\/p>\n<hr\/>\n<p>  <a name=\"elementAt\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/elementat.html\">elementAt<\/a><\/h3>\n<p>  \u0412 RO \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 N \u043f\u043e \u0441\u0447\u0435\u0442\u0443<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/205\/8c5\/dfd\/2058c5dfd4c44783846cb3142afb3e3e.png\"\/><\/p>\n<pre><code>example(&quot;elementAt&quot;) {     let sequence = Observable.of(0, 10, 20, 30, 40)         .elementAt(2)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- elementAt example --- Next(20) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"filter\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/filter.html\">filter<\/a><\/h3>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ff1\/a05\/494\/ff1a054945cb42ab9093f7b68b3645e8.png\"\/><\/p>\n<pre><code>example(&quot;filter&quot;) {     let sequence = Observable.of(1, 20, 3, 40)         .filter{ $0 &gt; 10}     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- filter example --- Next(20) Next(40) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"ignoreElements\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/ignoreelements.html\">ignoreElements<\/a><\/h3>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Completed \u0438 Error<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/087\/0ad\/bdf\/0870adbdffa44870a1213f08d7b29b8b.png\"\/><\/p>\n<pre><code>example(&quot;ignoreElements&quot;) {     let sequence = Observable.of(1, 2, 3, 4)         .ignoreElements()     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- ignoreElements example --- Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"sample\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/sample.html\">sample<\/a><\/h3>\n<p>  \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u043c\u043f\u043b\u0435\u0440\u0430 (\u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0442\u0430\u0439\u043c\u0435\u0440) \u2014 \u0431\u0440\u0430\u0442\u044c <b>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439<\/b> \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 RO, \u0415\u0421\u041b\u0418 \u043e\u043d \u043d\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0440\u0430\u043d\u0435\u0435<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f69\/268\/3e7\/f692683e77ca44089e106d7ac704393d.png\"\/><\/p>\n<pre><code>example(&quot;sampler&quot;) {     let sampler = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance).debug(&quot;sampler&quot;)          let sequence:Observable&lt;Int&gt; = createSequenceWithWait([1,2,3,4], waitTime: 3).sample(sampler)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- sampler example --- 2016-04-12 18:28:20.322: sampler -&gt; subscribed 2016-04-12 18:28:21.323: sampler -&gt; Event Next(0) Next(1) 2016-04-12 18:28:22.324: sampler -&gt; Event Next(1) \/\/ \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 RO \u043d\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0442.\u043a. \u043e\u043d \u0443\u0436\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0440\u0430\u043d\u0435\u0435 2016-04-12 18:28:23.323: sampler -&gt; Event Next(2) Next(2) 2016-04-12 18:28:24.323: sampler -&gt; Event Next(3) \/\/ \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 RO \u043d\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0442.\u043a. \u043e\u043d \u0443\u0436\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0440\u0430\u043d\u0435\u0435 2016-04-12 18:28:25.323: sampler -&gt; Event Next(4) \/\/ \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 RO \u043d\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0442.\u043a. \u043e\u043d \u0443\u0436\u0435 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0440\u0430\u043d\u0435\u0435 2016-04-12 18:28:26.323: sampler -&gt; Event Next(5) Next(3) ... <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"single\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/first.html\">single<\/a><\/h3>\n<p>  \u0418\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 &gt; 1 \u2014 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443. \u0415\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/212\/6d0\/219\/2126d02199a8426d9617a7e5a3c8ad96.png\"\/><\/p>\n<pre><code>example(&quot;single generate error&quot;) {     let sequence = Observable.of(1, 2, 3, 4).single()     sequence.subscribe { e in         print(e)     } }  example(&quot;single&quot;) {     let sequence = Observable.of(1, 2, 3, 5).single {         $0 % 2 == 0     }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- single generate error example --- Next(1) Error(Sequence contains more than one element.)  --- single example --- Next(2) Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 SO \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u043b \u0432\u0441\u0435\u0433\u043e 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e<\/p>\n<hr\/>\n<p>  <a name=\"skip\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/skip.html\">skip<\/a><\/h3>\n<p>  \u0418\u0437 SO \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/194\/70a\/3a8\/19470a3a89e941949aa7a5c9a8a87e7a.png\"\/><\/p>\n<pre><code>example(&quot;skip&quot;) {     let sequence = Observable.of(1, 2, 3, 4).skip(2)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- skip example --- Next(3) Next(4) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"skipDuration\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/skip.html\">skip (duration)<\/a><\/h3>\n<p>  \u0418\u0437 SO \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0435\u0440\u0432\u044b\u0435 N<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/82e\/042\/f1d\/82e042f1d6b04781beb1f172c5489f36.png\"\/><\/p>\n<pre><code>example(&quot;skip duration with wait&quot;) {     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }.skip(2, scheduler: MainScheduler.instance)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- skip duration with wait example --- Next(3) Next(4) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"skipUntil\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/skipuntil.html\">skipUntil<\/a><\/h3>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0437 SO \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e9f\/a88\/055\/e9fa880557014f69865c887368ae896f.png\"\/><\/p>\n<pre><code>example(&quot;skipUntil&quot;) {     let firstSequence = createSequenceWithWait([1,2,3,4]) { $0 }     let secondSequence = Observable.just(1)         .delaySubscription(1, scheduler: MainScheduler.instance)     let skippedSequence = firstSequence.skipUntil(secondSequence)          skippedSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- skipUntil example --- Next(3) Next(4) Completed <\/code><\/pre>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 secondSequence \u0431\u044b\u043b\u0430 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b delaySubscription, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 firstSequence \u0441\u0442\u0430\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 RO \u043b\u0438\u0448\u044c \u0447\u0435\u0440\u0435\u0437 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443<\/p>\n<hr\/>\n<p>  <a name=\"skipWhile\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/skipwhile.html\">skipWhile<\/a><\/h3>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0437 SO \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/373\/863\/a24\/373863a24f6b4cb6b9cbf82f858f241f.png\"\/><\/p>\n<pre><code>example(&quot;skipWhile&quot;) {     let firstSequence = [1,2,3,4,0].toObservable()     let skipSequence = firstSequence.skipWhile { $0 &lt; 3 }          skipSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- skipWhile example --- Next(3) Next(4) Next(0) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"skipWhileWithIndex\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/skipwhile.html\">skipWhileWithIndex<\/a><\/h3>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0437 SO \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 skipWhile \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a7d\/969\/0cd\/a7d9690cd41d4ab59a77e620e80740d7.png\"\/><\/p>\n<pre><code>example(&quot;skipWhileWithIndex&quot;) {     let firstSequence = [1,2,5,0,7].toObservable()     let skipSequence = firstSequence.skipWhileWithIndex{ value, idx in         value &lt; 4 || idx &lt; 2     }     skipSequence.subscribe { e in         print(e)     } }  <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- skipWhileWithIndex example --- Next(5) Next(0) Next(7) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"take\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/take.html\">take<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0432\u044b\u0435 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/65c\/0b9\/b98\/65c0b9b983894312a9f5b147d5bef422.png\"\/><\/p>\n<pre><code>example(&quot;take&quot;) {     let sequence = Observable.of(1, 2, 3, 4).take(2)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- take example --- Next(1) Next(2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"takeDuration\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/take.html\">take (duration)<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0435\u0440\u0432\u044b\u0435 N \u0441\u0435\u043a\u0443\u043d\u0434<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b79\/965\/6ea\/b799656eaf11412187d8dcf5697e616a.png\"\/><\/p>\n<pre><code>example(&quot;take duration with wait&quot;) {     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }     let takeSequence = sequence.take(2, scheduler: MainScheduler.instance)     takeSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- take duration with wait example --- Next(1) Next(2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"takeLast\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/takelast.html\">takeLast<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0427\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 SO \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 \u0432 RO \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/4b1\/97f\/253\/4b197f2530e043b0bd5ee13dd43cc445.png\"\/><\/p>\n<pre><code>example(&quot;takeLast&quot;) {     let sequence = Observable.of(1, 2, 3, 4).takeLast(2)     sequence.subscribe { e in         print(e)     } }  example(&quot;takeLast with wait&quot;) {     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }     let takeSequence = sequence.takeLast(2)     takeSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- takeLast example --- Next(3) Next(4) Completed  --- takeLast with wait example --- Next(3) Next(4) Completed <\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0434\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 RO \u0438\u0437 \u0437\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 SO<\/p>\n<hr\/>\n<p>  <a name=\"takeUntil\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/takeuntil.html\">takeUntil<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u044b \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f62\/c4c\/834\/f62c4c834e63461da88d8b208c037e14.png\"\/><\/p>\n<pre><code>example(&quot;takeUntil&quot;) {     let stopSequence = Observable.just(1)         .delaySubscription(2, scheduler: MainScheduler.instance)     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }         .takeUntil(stopSequence)     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- takeUntil example --- Next(1) Next(2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"takeWhile\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/takewhile.html\">takeWhile<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2b6\/e59\/c4c\/2b6e59c4c0fb42c3a7f11da4cdf85a36.png\"\/><\/p>\n<pre><code>example(&quot;takeWhile&quot;) {     let sequence = [1,2,3,4].toObservable().takeWhile{ $0 &lt; 3 }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- takeWhile example --- Next(1) Next(2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"takeWhileWithIndex\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/takewhile.html\">takeWhileWithIndex<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 takeWhile \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/445\/d0b\/259\/445d0b259f054d8bbe21218fba5a4f18.png\"\/><\/p>\n<pre><code>example(&quot;takeWhileWithIndex&quot;) {     let sequence = [1,2,3,4,5,6].toObservable()         .takeWhileWithIndex{ (val, idx) in             val % 2 == 0 || idx &lt; 3     }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- takeWhileWithIndex example --- Next(1) Next(2) Next(3) Next(4) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"throttle\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/debounce.html\">throttle<\/a><\/h3>\n<p>  \u0418\u0437 SO \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 N \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/da6\/5c7\/9c1\/da65c79c1e6a4630acb8eafd50a9495e.png\"\/><\/p>\n<pre><code>example(&quot;throttle&quot;) {     let sequence = Observable.of(1, 2, 3, 4)         .throttle(1, scheduler: MainScheduler.instance)     sequence.subscribe { e in         print(e)     } }  example(&quot;throttle with wait&quot;) {     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }         .throttle(0.5, scheduler: MainScheduler.instance)          sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- throttle example --- Next(4) Completed  --- throttle with wait example --- Next(1) Next(2) Next(3) Next(4) Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0431\u044f \u043d\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c N \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 throttle, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a.<\/p>\n<h1>\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h1>\n<hr\/>\n<p>  <a name=\"buffer\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/buffer.html\">buffer<\/a><\/h3>\n<pre><code>SO = Observable&lt;&gt;&gt; RO = Observable&lt;[T]&gt; <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 SO \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f count, \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0438 timeSpan \u0432\u0440\u0435\u043c\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 SO. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 RO, \u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 [T], \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u043e\u0442 0 \u0434\u043e count.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/caa\/289\/6ac\/caa2896ac5104866a1c405c3e803aa84.png\"\/><\/p>\n<pre><code>example(&quot;buffer&quot;) {     let varA = Variable&lt;Int&gt;(0)          let bufferSequence = varA.asObservable()         .buffer(timeSpan: 3, count: 3, scheduler: MainScheduler.instance)     bufferSequence.subscribe { e in         print(&quot;\\(NSDate()) - \\(e)&quot;)     }     varA.value = 1     varA.value = 2     varA.value = 3     delay(3) {         varA.value = 4         varA.value = 5         delay(5) {             varA.value = 6         }     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- buffer example --- 2016-04-12 16:10:58 +0000 - Next([0, 1, 2]) 2016-04-12 16:11:01 +0000 - Next([3])  2016-04-12 16:11:04 +0000 - Next([4, 5]) 2016-04-12 16:11:07 +0000 - Next([6]) 2016-04-12 16:11:07 +0000 - Completed  <\/code><\/pre>\n<p>  \u0414\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u044b\u043b\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043a\u0430\u043a 3, \u2014 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b 3 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 \u0432 RO \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442 [0, 1, 2]<br \/>  \u041f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 3, \u2014 \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0442\u0430\u0439\u043c\u0430\u0443\u0442, \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. <br \/>  \u0422\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 5<\/p>\n<hr\/>\n<p>  <a name=\"flatMap\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/flatmap.html\">flatMap<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Observable, \u0438 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 [O1, O2, O3\u2026] \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 RO. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 RO \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 [O1, O2, O3\u2026] (\u043a\u0430\u043a \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 merge)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/6d7\/5e2\/dce\/6d75e2dce2bf42978ce604aae5c2217f.png\"\/><\/p>\n<pre><code>example(&quot;flatMap with wait&quot;) {     let sequence:Observable&lt;Int&gt; = createSequenceWithWait([0,1,2], waitTime: 1) { $0 }     let flatMapSequence:Observable&lt;String&gt; = sequence.flatMap{val in         createSequenceWithWait([10,11,12], waitTime: 2) { element in             &quot;\\(element) - \\(val)&quot;         }     }     flatMapSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- flatMap with wait example --- Next(10 - 0) Next(10 - 1) Next(11 - 0) Next(10 - 2) Next(11 - 1) Next(12 - 0) Next(11 - 2) Next(12 - 1) Next(12 - 2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"flatMapFirst\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/flatmap.html\">flatMapFirst<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Observable. <br \/>  1) \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 O1, \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO. \u041f\u043e\u043a\u0430 O1 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 Observable \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 SO \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f. <br \/>  2) \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e O1 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u2014 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u0432\u044b\u0439 Observable \u2014 \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0438 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 RO. <br \/>  \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u043f\u0443\u043d\u043a\u0442 1, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e O1 \u0431\u0435\u0440\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Observable<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d32\/de4\/c09\/d32de4c093da4668a1a6bb78ba4ef1c1.png\"\/><\/p>\n<pre><code>example(&quot;flatMapFirst&quot;) {     let sequence:Observable&lt;Int&gt; = Observable.of(10, 20, 30)         .debug(&quot;sequence&quot;)     let flatMapSequence:Observable&lt;String&gt; = sequence         .flatMapFirst{val in             Observable.of(0, 1, 2)                 .map{&quot;\\($0) - \\(val)&quot;             }     }     flatMapSequence.subscribe { e in         print(e)     } }   example(&quot;flatMapFirst with delay&quot;) {     let subjectA = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(10))         }         delay(1) {             observer.on(.Next(20))         }         delay(7) {             observer.onCompleted()         }         return NopDisposable.instance     }.debug(&quot;sA&quot;)     let subjectB = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(100))         }         delay(1) {             observer.on(.Next(200))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance     }.debug(&quot;sB&quot;)      let subjectC = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(1000))         }         delay(1) {             observer.on(.Next(2000))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance     }.debug(&quot;sC&quot;)      let subjects = [subjectA, subjectB, subjectC]     let sequence:Observable&lt;Int&gt; = createSequenceWithWait([0, 1, 2],waitTime:4){$0}         .debug(&quot;sequence&quot;)     let flatMapSequence:Observable&lt;Int&gt; = sequence.flatMapFirst{val in         return subjects[val].asObservable()         }.debug(&quot;flatMapSequence&quot;)     flatMapSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code> --- flatMapFirst example --- 2016-04-12 19:19:46.915: sequence -&gt; subscribed 2016-04-12 19:19:46.916: sequence -&gt; Event Next(10) Next(0 - 10) Next(1 - 10) Next(2 - 10) 2016-04-12 19:19:46.918: sequence -&gt; Event Next(20) Next(0 - 20) Next(1 - 20) Next(2 - 20) 2016-04-12 19:19:46.919: sequence -&gt; Event Next(30) Next(0 - 30) Next(1 - 30) Next(2 - 30) 2016-04-12 19:19:46.921: sequence -&gt; Event Completed Completed 2016-04-12 19:19:46.921: sequence -&gt; disposed  --- flatMapFirst with delay example --- 2016-04-12 19:19:46.925: flatMapSequence -&gt; subscribed 2016-04-12 19:19:46.926: sequence -&gt; subscribed 2016-04-12 19:19:46.935: sequence -&gt; Event Next(0) \/\/ SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 1\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 2016-04-12 19:19:46.935: sA -&gt; subscribed \/\/ \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f Observable sA, \u043d\u0430  \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f 2016-04-12 19:19:46.936: sA -&gt; Event Next(10) 2016-04-12 19:19:46.936: flatMapSequence -&gt; Event Next(10) Next(10) 2016-04-12 19:19:47.936: sA -&gt; Event Next(20) 2016-04-12 19:19:47.936: flatMapSequence -&gt; Event Next(20) Next(20) 2016-04-12 19:19:50.926: sequence -&gt; Event Next(1) \/\/ SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 2\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 sA \u0435\u0449\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 sB \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f 2016-04-12 19:19:53.935: sA -&gt; Event Completed  2016-04-12 19:19:53.936: sA -&gt; disposed \/\/ sA \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043e\u0442 \u043d\u0435\u0433\u043e \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c 2016-04-12 19:19:55.137: sequence -&gt; Event Next(2) \/\/ SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 3\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 2016-04-12 19:19:55.137: sC -&gt; subscribed \/\/ \u0442.\u043a. \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 Observable (\u043e\u0442 sA \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c, sB - \u043c\u044b \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b\u0438) - \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e 2016-04-12 19:19:55.137: sC -&gt; Event Next(1000) 2016-04-12 19:19:55.137: flatMapSequence -&gt; Event Next(1000) Next(1000) 2016-04-12 19:19:56.236: sC -&gt; Event Next(2000) 2016-04-12 19:19:56.236: flatMapSequence -&gt; Event Next(2000) Next(2000) 2016-04-12 19:19:57.335: sC -&gt; Event Completed 2016-04-12 19:19:57.336: sC -&gt; disposed 2016-04-12 19:19:58.926: sequence -&gt; Event Completed 2016-04-12 19:19:58.926: flatMapSequence -&gt; Event Completed Completed 2016-04-12 19:19:58.926: sequence -&gt; disposed <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0442.\u043a. Observable \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 Observable \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 RO \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u0445 Observable<br \/>  \u0410 \u0432\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430\/\u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<hr\/>\n<p>  <a name=\"flatMapLatest\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/flatmap.html\">flatMapLatest<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Observable. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 O1, \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 RO. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 SO \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 Observable \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e Observable \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0442.\u043a. \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 RO \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e Observable<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/664\/8c2\/e11\/6648c2e110b14a6faa31ba7b9ecb72a7.png\"\/><\/p>\n<pre><code>example(&quot;flatMapLatest&quot;) {     let sequence:Observable&lt;Int&gt; = Observable.of(10, 20, 30)     let flatMapSequence = sequence.flatMapLatest{val in Observable.of(0, 1, 2)         .map{&quot;\\($0) - \\(val)&quot;         }     }     flatMapSequence.subscribe { e in         print(e)     } }  example(&quot;flatMapLatest with delay&quot;) {     let subjectA = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(10))         }         delay(3) {             observer.on(.Next(20))         }         delay(5) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;sA&quot;)     let subjectB = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(100))         }         delay(1) {             observer.on(.Next(200))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;sB&quot;)          let subjectC = Observable&lt;Int&gt;.create{ observer in         delay(0) {             observer.on(.Next(1000))         }         delay(1) {             observer.on(.Next(2000))         }         delay(2) {             observer.onCompleted()         }         return NopDisposable.instance         }.debug(&quot;sC&quot;)          let subjects = [subjectA, subjectB, subjectC]     let sequence:Observable&lt;Int&gt; = createSequenceWithWait([0, 1, 2],waitTime:1) {$0}         .debug(&quot;sequence&quot;)     let flatMapSequence:Observable&lt;Int&gt; = sequence.flatMapLatest{val in         return subjects[val].asObservable()         }.debug(&quot;flatMapSequence&quot;)     flatMapSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- flatMapLatest example --- Next(0 - 10) Next(1 - 10) Next(2 - 10) Next(0 - 20) Next(1 - 20) Next(2 - 20) Next(0 - 30) Next(1 - 30) Next(2 - 30) Completed  --- flatMapLatest with delay example --- 2016-04-12 19:30:50.309: flatMapSequence -&gt; subscribed 2016-04-12 19:30:50.310: sequence -&gt; subscribed 2016-04-12 19:30:50.318: sequence -&gt; Event Next(0) \/\/ SO \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 1\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 sA 2016-04-12 19:30:50.319: sA -&gt; subscribed \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 sA 2016-04-12 19:30:50.319: sA -&gt; Event Next(10) \/\/ \u043e\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 2016-04-12 19:30:50.319: flatMapSequence -&gt; Event Next(10) \/\/ flatMap \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442  Next(10) \/\/ \u0438 \u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 RO 2016-04-12 19:30:51.310: sequence -&gt; Event Next(1) \/\/ SO \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 2\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 sA 2016-04-12 19:30:51.311: sA -&gt; disposed \/\/ \u0438 \u0445\u043e\u0442\u044c sA \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043e\u0442 \u043d\u0435\u0433\u043e \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f 2016-04-12 19:30:51.311: sB -&gt; subscribed \/\/ \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 Observable sB 2016-04-12 19:30:51.311: sB -&gt; Event Next(100) 2016-04-12 19:30:51.311: flatMapSequence -&gt; Event Next(100) Next(100) 2016-04-12 19:30:52.310: sequence -&gt; Event Next(2) 2016-04-12 19:30:52.311: sB -&gt; disposed 2016-04-12 19:30:52.311: sC -&gt; subscribed 2016-04-12 19:30:52.311: sC -&gt; Event Next(1000) 2016-04-12 19:30:52.311: flatMapSequence -&gt; Event Next(1000) Next(1000) 2016-04-12 19:30:53.372: sequence -&gt; Event Completed 2016-04-12 19:30:53.372: sequence -&gt; disposed 2016-04-12 19:30:53.372: sC -&gt; Event Next(2000) 2016-04-12 19:30:53.372: flatMapSequence -&gt; Event Next(2000) Next(2000) 2016-04-12 19:30:54.501: sC -&gt; Event Completed 2016-04-12 19:30:54.501: sC -&gt; disposed 2016-04-12 19:30:54.501: flatMapSequence -&gt; Event Completed Completed <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0442.\u043a. Observable \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 Observable \u2014 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 RO \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u0445 Observable<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 Observable \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e Observable<\/p>\n<hr\/>\n<p>  <a name=\"flatMapWithIndex\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/flatmap.html\">flatMapWithIndex<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Observable, \u0438 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 [O1, O2, O3\u2026] \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 RO. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 RO \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 [O1, O2, O3\u2026] (\u043a\u0430\u043a \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 merge). \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 flatMap \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/6d7\/5e2\/dce\/6d75e2dce2bf42978ce604aae5c2217f.png\"\/><\/p>\n<pre><code>example(&quot;flatMapWithIndex&quot;) {     let sequence:Observable&lt;Int&gt; = Observable.of(10, 20, 30)     let flatMapSequence:Observable&lt;String&gt; = sequence.flatMapWithIndex{val, idx  in Observable.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;).map{&quot;index: (\\(idx)) - \\($0) - \\(val)&quot;} }     print(flatMapSequence.dynamicType)          flatMapSequence.subscribe { e in         print(e)     } }  example(&quot;flatMapWithIndex with wait&quot;) {     let sequence:Observable&lt;Int&gt; = createSequenceWithWait([0,1,2], waitTime: 1) { $0 }     let flatMapSequence:Observable&lt;String&gt; = sequence.flatMapWithIndex{val, idx in         createSequenceWithWait([&quot;A&quot;,&quot;B&quot;,&quot;C&quot;], waitTime: 2) { element in             &quot;index: (\\(idx)) - \\(element) - \\(val)&quot;         }     }     print(flatMapSequence.dynamicType)          flatMapSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>FlatMapWithIndex&lt;Int, Observable&lt;String&gt;&gt; Next(index: (0) - A - 10) Next(index: (0) - B - 10) Next(index: (0) - C - 10) Next(index: (1) - A - 20) Next(index: (1) - B - 20) Next(index: (1) - C - 20) Next(index: (2) - A - 30) Next(index: (2) - B - 30) Next(index: (2) - C - 30) Completed  --- flatMapWithIndex with wait example --- FlatMapWithIndex&lt;Int, Observable&lt;String&gt;&gt; Next(index: (0) - A - 0) Next(index: (1) - A - 1) Next(index: (0) - B - 0) Next(index: (2) - A - 2) Next(index: (1) - B - 1) Next(index: (0) - C - 0) Next(index: (2) - B - 2) Next(index: (1) - C - 1) Next(index: (2) - C - 2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"map\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/map.html\">map<\/a><\/h3>\n<pre><code>Observable&lt;T&gt; -&gt; Observable&lt;U&gt; <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b SO \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0438 \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8ba\/d56\/404\/8bad564047d141d9a034791fe1c1218b.png\"\/><\/p>\n<pre><code>example(&quot;map&quot;) {     let sequence = Observable.of(1, 2, 3)         .map{ &quot;\\($0 * 5)&quot; }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- map example --- Next(5) Next(10) Next(15) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"mapWithIndex\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/map.html\">mapWithIndex<\/a><\/h3>\n<pre><code>Observable&lt;T&gt; -&gt; Observable&lt;U&gt; <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b SO \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0438 \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 map \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8ba\/d56\/404\/8bad564047d141d9a034791fe1c1218b.png\"\/><\/p>\n<pre><code>example(&quot;mapWithIndex&quot;) {     let sequence = Observable.of(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;)         .mapWithIndex({ &quot;\\($0) \/ \\($1)&quot; })     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- mapWithIndex example --- Next(A \/ 0) Next(B \/ 1) Next(C \/ 2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"window\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/window.html\">window<\/a><\/h3>\n<pre><code>SO = Observable&lt;T&gt; RO = Observable&lt;Observable&lt;T&gt;&gt; <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 SO \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u043e\u0432\u044b\u0435 Observable. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f count, \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u0436\u0434\u044b\u043c Observable, \u0438 timeSpan \u2014 \u0432\u0440\u0435\u043c\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e Observable \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 SO. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 RO, \u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 Observable \u0447\u0438\u0441\u043b\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0432\u043d\u043e \u043e\u0442 0 \u0434\u043e N. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u043e\u0442 bufffer \u2014 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b SO \u0437\u0435\u0440\u043a\u0430\u043b\u044f\u0442\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 Observable \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 buffer \u2014 \u043c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0436\u0434\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435)<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/110\/eb1\/906\/110eb190627c461a825632af0b280c7d.png\"\/><\/p>\n<pre><code>example(&quot;window&quot;) {     let varA = Variable&lt;Int&gt;(0)          let bufferSequence:Observable&lt;Observable&lt;Int&gt;&gt; = varA.asObservable()         .window(timeSpan: 3, count: 3, scheduler: MainScheduler.instance)         .debug(&quot;bufferSequence&quot;)     bufferSequence.subscribe { e in         if case .Next(let observable) = e {             print(&quot;\\(NSDate()) - \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 Observable&quot;)             observable.subscribe { val in                 print(val)                              }         }     }     varA.value = 1     varA.value = 2     varA.value = 3     delay(4) {         varA.value = 4                  varA.value = 5         delay(4) {             varA.value = 6         }     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code> --- window example --- 2016-04-12 19:51:54.372: bufferSequence -&gt; subscribed 2016-04-12 19:51:54.373: bufferSequence -&gt; Event Next(RxSwift.AddRef&lt;Swift.Int&gt;) 2016-04-12 16:51:54 +0000 - \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 Observable Next(0) Next(1) Next(2) Completed 2016-04-12 19:51:54.377: bufferSequence -&gt; Event Next(RxSwift.AddRef&lt;Swift.Int&gt;) 2016-04-12 16:51:54 +0000 - \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 Observable Next(3) Completed 2016-04-12 19:51:57.378: bufferSequence -&gt; Event Next(RxSwift.AddRef&lt;Swift.Int&gt;) 2016-04-12 16:51:57 +0000 - \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 Observable Next(4) Next(5) Completed 2016-04-12 19:52:00.380: bufferSequence -&gt; Event Next(RxSwift.AddRef&lt;Swift.Int&gt;) 2016-04-12 16:52:00 +0000 - \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 Observable Next(6) Completed 2016-04-12 19:52:02.895: bufferSequence -&gt; Event Completed <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 Observable<\/p>\n<h1>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h1>\n<hr\/>\n<p>  <a name=\"reduce\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/reduce.html\">reduce<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, RO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442.\u0435. RO \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e01\/c11\/9b5\/e01c119b5b6b4211a931a67590f52531.png\"\/><\/p>\n<pre><code>example(&quot;reduce&quot;) {     let sequence = Observable.of(1, 2, 3, 4)         .reduce(1) { $0 * $1 }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- reduce example --- Next(24) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"scan\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/scan.html\">scan<\/a><\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 SO \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 RO, \u043d\u043e \u043a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 reduce \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 RO \u0440\u0430\u0432\u043d\u043e \u0447\u0438\u0441\u043b\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 SO.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/17d\/b4b\/161\/17db4b16115a453bafe022cfcec185e0.png\"\/><\/p>\n<pre><code>example(&quot;scan&quot;) {     let sequence = Observable.of(1, 2, 3).scan(10) { result, element in         return result + element     }     sequence.subscribe { e in         print(e)     } }  example(&quot;scan multiply&quot;) {     let sequence = Observable.of(2, 3, 5).scan(10) { result, element in         return result * element     }     sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- scan example --- Next(11) Next(13) Next(16) Completed  --- scan multiply example --- Next(20) Next(60) Next(300) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"toArray\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/to.html\">toArray<\/a><\/h3>\n<pre><code>SO = Observable&lt;T&gt; RO = Observable&lt;[T]&gt;    <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 SO \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f RO<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/de6\/470\/e77\/de6470e773f34bb5bc5de7a3dece4568.png\"\/><\/p>\n<pre><code>example(&quot;toArray&quot;) {     let sequence = Observable.of(1, 2, 3)      let arraySequence = sequence.toArray()     arraySequence.subscribe { e in             print(e)         } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- toArray example --- Next([1, 2, 3]) Completed <\/code><\/pre>\n<h1>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438<\/h1>\n<hr\/>\n<p>  <a name=\"catchError\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/catch.html\">catchError<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0437 SO \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0435 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 Observable, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/543\/094\/bc6\/543094bc6d3c405e8a59a61cf3aeb805.png\"\/><\/p>\n<pre><code>example(&quot;with catchError&quot;) {     let sequenceWithError = Observable&lt;Int&gt;.create { observer in         observer.on(.Next(1))         observer.on(.Next(2))         observer.on(.Next(3))         observer.on(.Next(4))         observer.onError(RxError.Unknown)         observer.on(.Next(5))         return NopDisposable.instance     }     let sequenceIgnoreError = sequenceWithError.catchError{ error in         return Observable.of(10, 11, 12)     }          sequenceIgnoreError.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- with catchError example --- Next(1) Next(2) Next(3) Next(4)  Next(10) Next(11) Next(12) Completed <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 4, \u0431\u044b\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 RxError.Unknown, \u043d\u043e \u043c\u044b \u0435\u0451 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043b\u0438 \u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0432\u0437\u0430\u043c\u0435\u043d \u043d\u043e\u0432\u044b\u0439 Observable<\/p>\n<hr\/>\n<p>  <a name=\"catchErrorJustReturn\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/catch.html\">catchErrorJustReturn<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0437 SO \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e SO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 Completed<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/188\/168\/8f6\/1881688f64e342bbb60057e7c9cc1259.png\"\/><\/p>\n<pre><code>example(&quot;with catchErrorJustReturn&quot;) {     let sequenceWithError = Observable.of(1, 2, 3, 4)         .concat(Observable.error(RxError.Unknown))         .concat(Observable.just(5))     let sequenceIgnoreError = sequenceWithError.catchErrorJustReturn(-1)     sequenceIgnoreError.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- with catchErrorJustReturn example --- Next(1) Next(2) Next(3) Next(4) Next(-1) Completed <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 4, \u0431\u044b\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 RxError.Unknown, \u043d\u043e \u043c\u044b \u0435\u0451 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043b\u0438 \u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0432\u0437\u0430\u043c\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 -1<\/p>\n<hr\/>\n<p>  <a name=\"retry\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/retry.html\">retry<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0437 SO \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SO c \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0437 \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0441\u044f<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/6d8\/f89\/d82\/6d8f89d8264c4e6194344233b9cb4474.png\"\/><\/p>\n<pre><code>example(&quot;retry full sequence&quot;) {     let sequenceWithError = Observable.of(1, 2, 3, 4).concat(Observable.error(RxError.Unknown))     let wholeSequenceWithErrorRetry = sequenceWithError.retry(2)          wholeSequenceWithErrorRetry.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- retry full sequence example --- Next(1) Next(2) Next(3) Next(4) Next(1) Next(2) Next(3) Next(4) Error(Unknown error occured.) <\/code><\/pre>\n<p>  \u0422.\u043a. \u0431\u044b\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 retry(2) \u2014 \u043c\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 SO, \u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0430\u0441\u044c, \u0438 \u0431\u044b\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 RO<br \/>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c retry(1) \u2014 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0430<\/p>\n<hr\/>\n<p>  <a name=\"retryWhen\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/retry.html\">retryWhen<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u0437 SO \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u044b \u043b\u0438\u0431\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 RO \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c Observable (tryObservable), \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 SO, \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u0415\u0441\u043b\u0438 tryObservable \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u2014 \u043e\u043d\u0430 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 RO \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b1b\/23e\/d4c\/b1b23ed4c6e44e3ca27941bc00a838ed.png\"\/><\/p>\n<pre><code>example(&quot;retryWhen&quot;) {     var counter = 0     let sequenceWithError = Observable&lt;Int&gt;.create { observer in         observer.on(.Next(1))         observer.on(.Next(2))         observer.on(.Next(3))         observer.on(.Next(4))         counter += 1         if counter &lt; 3 {             observer.onError(RxError.Unknown)         } \/*else {             observer.onError(RxError.Overflow)         }*\/         observer.on(.Next(5))         return NopDisposable.instance     }.debug(&quot;with error&quot;)     let sequenceWithoutError = Observable&lt;Int&gt;.create { observer in         observer.on(.Next(10)) \/\/observer.onError(RxError.NoElements)         return NopDisposable.instance         }.debug(&quot;without error&quot;)     let retrySequence = sequenceWithError.retryWhen{ (error: Observable&lt;RxError&gt;) -&gt; Observable&lt;Int&gt; in         let seq:Observable&lt;Int&gt; = error.flatMap { (generatedError: RxError) -&gt; Observable&lt;Int&gt; in             if case .Unknown = generatedError {                 return sequenceWithoutError             }             return Observable&lt;Int&gt;.error(generatedError)         }         return seq      }\/\/.debug()       retrySequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code> --- retryWhen example --- 2016-04-12 20:18:04.484: with error -&gt; subscribed 2016-04-12 20:18:04.485: with error -&gt; Event Next(1) Next(1) 2016-04-12 20:18:04.486: with error -&gt; Event Next(2) Next(2) 2016-04-12 20:18:04.486: with error -&gt; Event Next(3) Next(3) 2016-04-12 20:18:04.487: with error -&gt; Event Next(4) Next(4) 2016-04-12 20:18:04.487: with error -&gt; Event Error(Unknown error occured.) 2016-04-12 20:18:04.488: without error -&gt; subscribed 2016-04-12 20:18:04.488: without error -&gt; Event Next(10) 2016-04-12 20:18:04.489: with error -&gt; disposed 2016-04-12 20:18:04.489: with error -&gt; subscribed 2016-04-12 20:18:04.489: with error -&gt; Event Next(1) Next(1) 2016-04-12 20:18:04.490: with error -&gt; Event Next(2) Next(2) 2016-04-12 20:18:04.490: with error -&gt; Event Next(3) Next(3) 2016-04-12 20:18:04.490: with error -&gt; Event Next(4) Next(4) 2016-04-12 20:18:04.491: with error -&gt; Event Error(Unknown error occured.) 2016-04-12 20:18:04.491: without error -&gt; subscribed 2016-04-12 20:18:04.492: without error -&gt; Event Next(10) 2016-04-12 20:18:04.492: with error -&gt; disposed 2016-04-12 20:18:04.492: with error -&gt; subscribed 2016-04-12 20:18:04.493: with error -&gt; Event Next(1) Next(1) 2016-04-12 20:18:04.493: with error -&gt; Event Next(2) Next(2) 2016-04-12 20:18:04.493: with error -&gt; Event Next(3) Next(3) 2016-04-12 20:18:04.494: with error -&gt; Event Next(4) Next(4) 2016-04-12 20:18:04.494: with error -&gt; Event Next(5) Next(5) <\/code><\/pre>\n<p>  \u042f \u0432\u0441\u0442\u0440\u043e\u0438\u043b \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 i \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e sequenceWithError, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 3\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u2014 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0441\u0447\u0435\u0437\u043b\u0430. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0448\u0438\u0431\u043a\u0443 RxError.Overflow \u2014 \u043c\u044b \u0435\u0451 \u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 retryWhen \u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u043c \u0432 RO<\/p>\n<h1>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Connectable Observable<\/h1>\n<hr\/>\n<p>  <a name=\"multicast\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/publish.html\">multicast<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 SO \u043d\u0430 Subject \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 Subject, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 Subject \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 connect.<\/p>\n<pre><code>example(&quot;multicast&quot;) {     let subject = PublishSubject&lt;Int&gt;()     let firstSequence = createSequenceWithWait([0,1,2,3,4,5]) { $0 }         .multicast(subject)     delay(2) {         _ = subject.subscribe { e in             print(&quot;first: \\(e)&quot;)         }     }     delay(3) {         _ = subject.subscribe { e in             print(&quot;second: \\(e)&quot;)         }     }     firstSequence.connect() } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- multicast example --- first: Next(2) first: Next(3) second: Next(3) first: Next(4) second: Next(4) first: Next(5) second: Next(5) first: Completed second: Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"publish\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/publish.html\">publish<\/a><\/h3>\n<p>  publish = multicast + replay subject <br \/>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Connectable Observable, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 subscribe. \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u043c Observable \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 connect. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Observer \u043a \u043e\u0434\u043d\u043e\u043c\u0443 Observable \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d subscribe<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/320\/763\/dc7\/320763dc7b664b16bb409c0df63c25e9.png\"\/><\/p>\n<pre><code>example(&quot;subscribe connectable sequnce with connect&quot;) {     let sequence = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance).debug(&quot;sequence&quot;).publish()     var disposable1: Disposable!     var disposable2: Disposable!     disposable1 = sequence.subscribe { e in         print(&quot;first: \\(e)&quot;)     }     delay(2) {         disposable2 = sequence.subscribe { e in             print(&quot;second: \\(e)&quot;)         }     }          delay(4) {         sequence.connect()     }          delay(8) {         disposable1.dispose()         disposable2.dispose()     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- subscribe connectable sequnce with connect example --- 2016-04-12 21:35:32.130: sequence -&gt; subscribed 2016-04-12 21:35:33.131: sequence -&gt; Event Next(0) first: Next(0) second: Next(0) 2016-04-12 21:35:34.131: sequence -&gt; Event Next(1) first: Next(1) second: Next(1) 2016-04-12 21:35:35.132: sequence -&gt; Event Next(2) first: Next(2) second: Next(2) 2016-04-12 21:35:36.132: sequence -&gt; Event Next(3) 2016-04-12 21:35:37.132: sequence -&gt; Event Next(4) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0445\u043e\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0432 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 connect \u2014 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c. \u0417\u0430\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0435 debug \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/p>\n<hr\/>\n<p>  <a name=\"refCount\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/refcount.html\">refCount<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Observable \u0438\u0437 Connectable. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 subscribe \u043a \u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 Observable \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Connectable \u043d\u0430 SO.<br \/>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u0442\u043e \u0432\u0440\u043e\u0434\u0435<br \/>  publishSequence = SO.publish()<br \/>  refCountSequence = publishSequence.refCount() <\/p>\n<p>  SO \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 refCountSequence. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 refCountSequence \u0430\u043d\u043d\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u0438 publishSequence \u043e\u0442 SO<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b3f\/cbd\/12e\/b3fcbd12e07243918bc05474121cbf2b.png\"\/><\/p>\n<pre><code>example(&quot;with refCount&quot;) {     let sequence = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance).debug(&quot;sequence&quot;)     let publishSequence = sequence.publish() \/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c Connectable Observable     let refCountSequence = publishSequence.refCount().debug(&quot;refCountSequence&quot;)     let subscription1 = refCountSequence.subscribe{ e in         print(&quot;first: \\(e)&quot;)     }     let subscription2 = refCountSequence.subscribe{ e in         print(&quot;second: \\(e)&quot;)     }          delay(2) {         subscription1.dispose() \/\/ \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437              }     delay(3) {         subscription2.dispose() \/\/ \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439, \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043d\u0430 Observable \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e refCount  \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 Observable \u043e\u0442\u043f\u0441\u0438\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 SO              }     delay(5) {         _ = refCountSequence.subscribe { e in             print(&quot;after: \\(e)&quot;)         }     } }  <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- with refCount example --- 2016-04-12 20:25:24.154: refCountSequence -&gt; subscribed \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 refCountSequence \u0432 1\u0439 \u0440\u0430\u0437 2016-04-12 20:25:24.155: sequence -&gt; subscribed \/\/ \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e publishSequence \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043d\u0430 SO 2016-04-12 20:25:24.156: refCountSequence -&gt; subscribed \/\/ \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 refCountSequence \u0432\u043e 2\u0439 \u0440\u0430\u0437 2016-04-12 20:25:25.156: sequence -&gt; Event Next(0) 2016-04-12 20:25:25.156: refCountSequence -&gt; Event Next(0) first: Next(0) 2016-04-12 20:25:25.156: refCountSequence -&gt; Event Next(0) second: Next(0) 2016-04-12 20:25:26.156: sequence -&gt; Event Next(1) 2016-04-12 20:25:26.156: refCountSequence -&gt; Event Next(1) first: Next(1) 2016-04-12 20:25:26.157: refCountSequence -&gt; Event Next(1) second: Next(1) 2016-04-12 20:25:26.353: refCountSequence -&gt; disposed \/\/ \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043e\u0442 refCountSequence \u0432 1\u0439 \u0440\u0430\u0437 2016-04-12 20:25:27.156: sequence -&gt; Event Next(2) \/\/ SO \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0442.\u043a. \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 refCountSequence 2016-04-12 20:25:27.157: refCountSequence -&gt; Event Next(2) second: Next(2) 2016-04-12 20:25:27.390: refCountSequence -&gt; disposed \/\/ \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043e\u0442 refCountSequence \u0432\u043e 2\u0439 \u0440\u0430\u0437 2016-04-12 20:25:27.390: sequence -&gt; disposed \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a \u043d\u0430 refCountSequence \u0431\u043e\u043b\u044c\u0448\u0435 \u043d \u0435\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 publishSequence \u043e\u0442\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043d\u0430 SO 2016-04-12 20:25:29.157: refCountSequence -&gt; subscribed \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438\u0441\u044c \u043d\u0430 refCountSequence \u0441\u043d\u043e\u0432\u0430 2016-04-12 20:25:29.157: sequence -&gt; subscribed \/\/ \u0442.\u043a. \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 - publishSequence \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043d\u0430 SO 2016-04-12 20:25:30.158: sequence -&gt; Event Next(0) 2016-04-12 20:25:30.159: refCountSequence -&gt; Event Next(0) after: Next(0) 2016-04-12 20:25:31.158: sequence -&gt; Event Next(1) 2016-04-12 20:25:31.159: refCountSequence -&gt; Event Next(1) after: Next(1) 2016-04-12 20:25:32.159: sequence -&gt; Event Next(2) 2016-04-12 20:25:32.159: refCountSequence -&gt; Event Next(2) after: Next(2) ....  \u0434\u0430\u043b\u0435\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"replay\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/replay.html\">replay<\/a><\/h3>\n<p>  \u0415\u0441\u043b\u0438 SO \u043e\u0431\u044b\u0447\u043d\u044b\u0439, \u2014 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 Connectable. \u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u043a\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 connect() \u2014 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 N \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0442\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432\u0441\u0435, \u2014 Connectable \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b02\/bc7\/029\/b02bc70299014f27980c6af4e13628e4.png\"\/><\/p>\n<pre><code>example(&quot;replay&quot;) {     let firstSequence = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance).replay(2)          let firstDisposable = firstSequence.subscribe { e in         print(&quot;first: \\(e)&quot;)     }          firstSequence.connect()          var secondDisposable: Disposable!     delay(3) {         secondDisposable = firstSequence.subscribe { e in         print(&quot;second: \\(e)&quot;)         }     }          delay(4) {         firstDisposable.dispose()     }     delay(5) {         secondDisposable.dispose()     }          delay(7) {         firstSequence.subscribe { e in             print(&quot;third: \\(e)&quot;)         }     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- replay example --- first: Next(0) first: Next(1) first: Next(2) second: Next(1) second: Next(2) first: Next(3) \/\/ \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u043e 1\u0439 \u0440\u0430\u0437 second: Next(3) second: Next(4) \/\/\u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u043e 2\u0439 \u0440\u0430\u0437, \u043d\u043e SO \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \/\/\u0442\u0443\u0442 \u043c\u044b \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437 third: Next(5) third: Next(6) <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"replayAll\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/replay.html\">replayAll<\/a><\/h3>\n<p>  \u0415\u0441\u043b\u0438 SO \u043e\u0431\u044b\u0447\u043d\u044b\u0439, \u2014 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 Connectable. \u0412\u0441\u0435 \u043a\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 connect() \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u043d\u0435\u0435. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0442\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432\u0441\u0435, \u2014 Connectable \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/156\/f90\/599\/156f90599fd0442daeec695123fe7e3b.png\"\/><\/p>\n<pre><code>example(&quot;replayAll&quot;) {     let firstSequence = Observable&lt;Int&gt;.interval(1, scheduler: MainScheduler.instance).replayAll()          let firstDisposable = firstSequence.subscribe { e in         print(&quot;first: \\(e)&quot;)     }          firstSequence.connect()          var secondDisposable: Disposable!     delay(3) {         secondDisposable = firstSequence.subscribe { e in             print(&quot;second: \\(e)&quot;)         }     }          delay(4) {         firstDisposable.dispose()     }     delay(5) {         secondDisposable.dispose()     }          delay(7) {         firstSequence.subscribe { e in             print(&quot;third: \\(e)&quot;)         }     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- replayAll example --- first: Next(0) first: Next(1) first: Next(2) second: Next(0) second: Next(1) second: Next(2) first: Next(3) \/\/ \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u043e 1\u0439 \u0440\u0430\u0437 second: Next(3) second: Next(4) \/\/\u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432\u043e 2\u0439 \u0440\u0430\u0437, \u043d\u043e SO \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \/\/\u0442\u0443\u0442 \u043c\u044b \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437 third: Next(0) third: Next(1) third: Next(2) third: Next(3) third: Next(4) third: Next(5) third: Next(6) third: Next(7) <\/code><\/pre>\n<h1>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b<\/h1>\n<hr\/>\n<p>  <a name=\"debug\"><\/a>  <\/p>\n<h3>debug<\/h3>\n<p>  RO \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 SO, \u043d\u043e \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439<\/p>\n<pre><code>example(&quot;debug&quot;) {     let sequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)         .debug(&quot;sequence&quot;)         .subscribe{} } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- debug example --- 2016-04-12 21:41:08.467: sequence -&gt; subscribed 2016-04-12 21:41:08.469: sequence -&gt; Event Next(1) 2016-04-12 21:41:08.469: sequence -&gt; Event Next(2) 2016-04-12 21:41:08.469: sequence -&gt; Event Next(3) 2016-04-12 21:41:08.469: sequence -&gt; Event Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"doOn\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/do.html\">do \/ doOnNext<\/a><\/h3>\n<p>  RO \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 SO, \u043d\u043e \u043c\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a \u0432\u0441\u0435\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 SO<\/p>\n<pre><code>example(&quot;simple doOn&quot;) {     let firstSequence = Observable.of(1,2).doOn{e in         print(e)     }     firstSequence.subscribeNext{ e in \/\/ \u0437\u0430\u043c\u0435\u0447\u0443 \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 subscribe, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0430 \u0432 doOn     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- simple doOn example --- Next(1) Next(2) Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"delaySubscription\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/delay.html\">delaySubscription<\/a><\/h3>\n<p>  \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 SO \u0432 RO, \u043d\u043e \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/26e\/ffc\/9b1\/26effc9b1a124e90873c3f030fac4786.png\"\/><\/p>\n<pre><code>example(&quot;delaySubscription&quot;) {     let sequence = Observable.of(1, 2, 3).debug(&quot;sequence&quot;)         .delaySubscription(3, scheduler: MainScheduler.instance).debug(&quot;delayed sequence&quot;)               sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- delaySubscription example --- 2016-04-12 21:44:05.226: delayed sequence -&gt; subscribed \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 delayed sequence \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434 2016-04-12 21:44:08.228: sequence -&gt; subscribed \/\/ \u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 SO \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b 2016-04-12 21:44:08.229: sequence -&gt; Event Next(1) 2016-04-12 21:44:08.229: delayed sequence -&gt; Event Next(1) Next(1) 2016-04-12 21:44:08.229: sequence -&gt; Event Next(2) 2016-04-12 21:44:08.229: delayed sequence -&gt; Event Next(2) Next(2) 2016-04-12 21:44:08.229: sequence -&gt; Event Next(3) 2016-04-12 21:44:08.229: delayed sequence -&gt; Event Next(3) Next(3) 2016-04-12 21:44:08.230: sequence -&gt; Event Completed 2016-04-12 21:44:08.230: delayed sequence -&gt; Event Completed Completed 2016-04-12 21:44:08.230: sequence -&gt; disposed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"observeOn\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/observeon.html\">observeOn<\/a><\/h3>\n<p>  \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c Scheduler \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 Observer, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 GUI<\/p>\n<pre><code>example(&quot;without observeOn&quot;) {     let sequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)          sequence.subscribe { e in         print(&quot;\\(NSThread.currentThread())\\(e)&quot;)     } }  example(&quot;with observeOn&quot;) {     let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)     let sequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)      sequence.observeOn(ConcurrentDispatchQueueScheduler.init(queue: queue))         .subscribe { e in             print(&quot;\\(NSThread.currentThread())\\(e)&quot;)     } }  <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- without observeOn example --- &lt;NSThread: 0x7fac1ac13240&gt;{number = 1, name = main}Next(1) &lt;NSThread: 0x7fac1ac13240&gt;{number = 1, name = main}Next(2) &lt;NSThread: 0x7fac1ac13240&gt;{number = 1, name = main}Next(3) &lt;NSThread: 0x7fac1ac13240&gt;{number = 1, name = main}Completed  --- with observeOn example --- &lt;NSThread: 0x7fac1ae50b50&gt;{number = 3, name = (null)}Next(1) &lt;NSThread: 0x7fac1ae50b50&gt;{number = 3, name = (null)}Next(2) &lt;NSThread: 0x7fac1ae50b50&gt;{number = 3, name = (null)}Next(3) &lt;NSThread: 0x7fac1ae50b50&gt;{number = 3, name = (null)}Completed <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f observeOn \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 subscribe \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435<\/p>\n<hr\/>\n<p>  <a name=\"subscribe\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/subscribe.html\">subscribe<\/a><\/h3>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 Observable \u0441 Observer, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 Observable<\/p>\n<pre><code>example(&quot;subscribe&quot;) {     let firstSequence = Observable.of(1)          firstSequence.subscribe { e in         print(e)     }          firstSequence.subscribeCompleted {         print(&quot;!completed&quot;)     }          firstSequence.subscribeNext{next in         print(&quot;next: \\(next)&quot;)     } }  example(&quot;subscribeNext&quot;) {     let firstSequence = Observable.of(1)          firstSequence.subscribeNext{next in         print(&quot;next: \\(next)&quot;)     } }  example(&quot;subscribeCompleted&quot;) {     let firstSequence = Observable.of(1)          firstSequence.subscribeCompleted {         print(&quot;!completed&quot;)     } }  example(&quot;subscribeError&quot;) {     let firstSequence = Observable&lt;Int&gt;.error(RxError.ArgumentOutOfRange)          firstSequence.subscribeError {e in         print(&quot;!error \\(e)&quot;)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code> --- subscribe example --- Next(1) Completed !completed next: 1  --- subscribeNext example --- next: 1  --- subscribeCompleted example --- !completed  --- subscribeError example --- !error Argument out of range.  <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b 4 \u0444\u043e\u0440\u043c\u044b: subscribe, subscribeNext, subscribeCompleted, subscribeError<\/p>\n<hr\/>\n<p>  <a name=\"subscribeOn\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/subscribeon.html\">subscribeOn<\/a><\/h3>\n<p>  \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c Scheduler \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 Observable, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 GUI<\/p>\n<pre><code>example(&quot;without subscribeOn&quot;) {     let sequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)     sequence.subscribe { e in         print(&quot;\\(NSThread.currentThread()) \\(e)&quot;)     } }  example(&quot;with subscribeOn&quot;) {     let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)     let sequence = Observable&lt;AnyObject&gt;.of(1, 2, 3)         .subscribeOn(ConcurrentDispatchQueueScheduler.init(queue: queue))          sequence.subscribe { e in         print(&quot;\\(NSThread.currentThread()) \\(e)&quot;)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- without subscribeOn example --- &lt;NSThread: 0x7fef30413290&gt;{number = 1, name = main} Next(1) &lt;NSThread: 0x7fef30413290&gt;{number = 1, name = main} Next(2) &lt;NSThread: 0x7fef30413290&gt;{number = 1, name = main} Next(3) &lt;NSThread: 0x7fef30413290&gt;{number = 1, name = main} Completed  --- with subscribeOn example --- &lt;NSThread: 0x7fef305c0db0&gt;{number = 3, name = (null)} Next(1) &lt;NSThread: 0x7fef305c0db0&gt;{number = 3, name = (null)} Next(2) &lt;NSThread: 0x7fef305c0db0&gt;{number = 3, name = (null)} Next(3) &lt;NSThread: 0x7fef305c0db0&gt;{number = 3, name = (null)} Completed <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"timeout\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/timeout.html\">timeout<\/a><\/h3>\n<p>  \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 SO \u0432 RO, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 SO \u043d\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2014 RO \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d02\/a14\/d21\/d02a14d2152d43ef935af540e056dd4b.png\"\/><\/p>\n<pre><code>example(&quot;failed timeout &quot;) {     let sequence = createSequenceWithWait([1,2,3,4]) { $0 }     let timeoutSequence = sequence.timeout(0.9, scheduler: MainScheduler.instance)     timeoutSequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- failed timeout  example --- Next(1) Error(Sequence timeout.) <\/code><\/pre>\n<hr\/>\n<p>  <a name=\"using\"><\/a>  <\/p>\n<h3><a href=\"http:\/\/reactivex.io\/documentation\/operators\/using.html\">using<\/a><\/h3>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c Observable \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0436\u0438\u0442\u044c \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430 \u0436\u0438\u0432 RO, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f 2 \u0444\u0430\u0431\u0440\u0438\u043a\u0438, \u043e\u0434\u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441, \u0432\u0442\u043e\u0440\u0430\u044f \u2014 Observable, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438<\/p>\n<pre><code>class FakeDisposable: Disposable {     func dispose() {         print(&quot;disposed&quot;)     } }  example(&quot;using&quot;) {     let sequence = Observable.using({         return FakeDisposable()         }, observableFactory: { d in             Observable.just(1)     }) as Observable&lt;Int&gt;           sequence.subscribe { e in         print(e)     } } <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c:  <\/p>\n<pre><code>--- using example --- Next(1) Completed disposed <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a Observable \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 FakeDisposable \u0431\u044b\u043b \u0432\u044b\u0437\u0432\u0430\u043d \u043c\u0435\u0442\u043e\u0434 dispose               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/281292\/\"> https:\/\/habrahabr.ru\/post\/281292\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/412\/1ee\/057\/4121ee0577d34944969a7512a4e92172.png\"\/><\/p>\n<p>  \u0417\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0442\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0432\u0441\u0442\u0430\u043b \u043d\u0430 \u0440\u0430\u0441\u043f\u0443\u0442\u044c\u0435, \u2014 \u043a\u0430\u043a\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f. ReactiveCocoa \u2014 \u0432\u0435\u0442\u0435\u0440\u0430\u043d \u0432 iOS \u043a\u0440\u0443\u0433\u0430\u0445, \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u0434\u043e\u0432\u043e\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u043e \u043e\u043d \u0432\u044b\u0440\u043e\u0441 \u0441 Objective-C, \u0438 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0438\u0448\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 Swift, \u2014 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0448\u0435\u043a \u044f\u0437\u044b\u043a\u0430. RxSwift \u0436\u0435 \u043f\u043e\u0440\u0442 Reactive Extensions, \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043b\u0433\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043d\u043e \u0441\u0430\u043c \u043f\u043e\u0440\u0442 \u0441\u0432\u0435\u0436\u0438\u0439 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434 Swift. \u041d\u0430 \u043d\u0435\u043c \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.<br \/>  \u041d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e RxSwift \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 <a href=\"http:\/\/reactivex.io\/\">reactivex.io<\/a>, \u0430 \u0442\u0430\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0440\u0443\u043a\u0438 \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438 \u0435\u0449\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f RxSwift, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043c\u0435\u044e\u0442 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0435\u0441\u0442\u044c \u0442\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043e\u0431\u0449\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f. <br \/>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0432\u0441\u0435 \u0433\u043b\u0430\u0432\u044b \u0432\u0438\u043a\u0438 \u0441 RxSwift \u0433\u0438\u0442\u0445\u0430\u0431\u0430, \u044f \u0441\u0440\u0430\u0437\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u0442\u0443\u0442 \u0442\u043e \u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0441 RX \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u0442, \u043d\u0443\u0436\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u044b, \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0448\u044c \u043a\u0430\u043a \u043c\u0430\u0440\u0442\u044b\u0448\u043a\u0430 \u0441 <s>\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043e\u043c<\/s> \u0433\u0440\u0430\u043d\u0430\u0442\u043e\u0439. \u042f \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u0442\u043e\u043c \u0442\u0435, \u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b, \u043d\u043e \u0437\u0430\u0434\u0430\u0432 \u0441\u0435\u0431\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u043d\u0438\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043b\u0438\u0448\u044c \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430 \u0442\u043e \u043a\u0430\u043a \u0432\u0435\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043d\u043e \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d.<br \/>  \u0412 \u043e\u0431\u0449\u0435\u043c \u043d\u0438\u0447\u0442\u043e\u0436\u0435 \u0441\u0443\u043c\u043d\u044f\u0448\u0435\u0441\u044f \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b RxSwift. \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0447\u0442\u043e \u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0417\u0430\u0442\u0435\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0441\u0445\u0435\u043c\u044b, \u043d\u0443 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0431\u043e\u0442\u0443, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0433\u0440\u0435\u0445 \u043d\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0441 \u0442\u0435\u043c, \u043a\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043c\u0435 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  <b>\u041c\u043d\u043e\u0433\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c, \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e!<\/b>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-278173","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=278173"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/278173\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=278173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=278173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=278173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}