{"id":4664,"date":"2022-06-07T16:50:08","date_gmt":"2022-06-07T07:50:08","guid":{"rendered":"https:\/\/redwing.moo.jp\/cocoa\/?p=4664"},"modified":"2022-06-07T18:49:54","modified_gmt":"2022-06-07T09:49:54","slug":"%e3%83%aa%e3%82%a2%e3%82%af%e3%83%86%e3%82%a3%e3%83%96%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%81combine-%e3%81%ae%e5%80%8b%e4%ba%ba%e7%9a%84%e3%81%aa%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/redwing.moo.jp\/cocoa\/archives\/4664","title":{"rendered":"\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3001Combine \u306e\u500b\u4eba\u7684\u306a\u30e1\u30e2"},"content":{"rendered":"\n<p>\u6642\u9593\u304c\u3042\u308b\u3068\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u8abf\u67fb\u306f\u884c\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u6bce\u56de\u307e\u3068\u3081\u308b\u524d\u306b\u5fd8\u308c\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u3053\u3068\u3092\u7e70\u308a\u8fd4\u3057\u3066\u3044\u305f\u306e\u3067\u3001\u4eca\u56de\u306f\u307e\u3068\u3081\u3066\u307f\u305f\u3002<br>\u696d\u52d9\u3067\u3044\u3064\u3082\u6700\u65b0\u306e\u624b\u6cd5\u306e\u307f\u3092\u4f7f\u3063\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u7fd2\u5f97\u3057\u3066\u3082\u307e\u3068\u3081\u3066\u304a\u304b\u306a\u3044\u3068\u5fd8\u308c\u3061\u3083\u3046\u3093\u3067\u3059\u3088\u306d\u3002(\u7b11)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9a\u7fa9<\/h2>\n\n\n\n<div class=\"wp-block-vk-blocks-alert alert alert-info\"><p><strong>\u975e\u540c\u671f\u30a4\u30d9\u30f3\u30c8\u306e\u51e6\u7406\u3092\u5ba3\u8a00\u7684\u306a\u8a18\u8ff0\u3067\u66f8\u304f\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3002<\/strong><\/p><\/div>\n\n\n\n<p>\u3082\u3046\u5c11\u3057\u30a4\u30e1\u30fc\u30b8\u3057\u3084\u3059\u3044\u8868\u73fe\u3060\u3068\u3001\u30c7\u30fc\u30bf\u6d41\u308c\u3092\u30a4\u30d9\u30f3\u30c8\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u3068\u3057\u3066\u8868\u73fe\u3057\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u306b\u5fdc\u3058\u305f\u632f\u308b\u821e\u3044\u3092\u3055\u305b\u308b\u8003\u3048\u65b9\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Combine\u6982\u8981<\/h2>\n\n\n\n<p>Combine \u304c\u767b\u5834\u3057\u305f\u306e\u306f 2019 \u5e74 6 \u6708\u306e WWDC\u3002<br>iOS 13.0\u4ee5\u4e0a\u3067\u4f7f\u7528\u3067\u304d\u308b\u3002<br>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u3067\u30a4\u30d9\u30f3\u30c8\u3092\u4f1d\u3048\u308b\u4ed5\u7d44\u307f\u3092\u63d0\u4f9b\u3059\u308b\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u306a\u8981\u7d20\u3068\u5f79\u5272\u306f\u3001\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n\n\n\n<ul class=\"is-style-vk-arrow-mark wp-block-list\"><li>Publisher \u2013 \u6642\u9593\u306e\u7d4c\u904e\u306b\u6cbf\u3063\u3066\u30a4\u30d9\u30f3\u30c8\u3092\u4f1d\u9054\u3059\u308b\u5f79\u5272<\/li><li>Operator \u2013 \u30a4\u30d9\u30f3\u30c8\u3092\u4f5c\u6210\u3001\u3082\u3057\u304f\u306f\u51e6\u7406\u3059\u308b\u5f79\u5272<\/li><li>Subscriber \u2013 Publisher \u304b\u3089\u9001\u4fe1\u3055\u308c\u305f\u30a4\u30d9\u30f3\u30c8\u3092\u51e6\u7406\u3059\u308b\u5f79\u5272<\/li><li>Cancellable \u2013 \u30a4\u30d9\u30f3\u30c8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3067\u304d\u308b\u3053\u3068\u3092\u8868\u73fe\u3059\u308b\u5f79\u5272<\/li><li>Subscription \u2013 Publisher \u3068 Subscriber \u306e\u8cfc\u8aad\u3092\u8868\u73fe\u3059\u308b\u5f79\u5272<\/li><\/ul>\n\n\n\n<p>subject\u306b\u5bfe\u3057\u3066\u3001\u8907\u6570\u306esubscribe\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3002<br>\u8907\u6570\u306esubscription\u3092\u6271\u3046\u5834\u5408\u3001store\u30e1\u30bd\u30c3\u30c9\u3067\u307e\u3068\u3081\u3066\u4fdd\u6301\u3059\u308b\u3002<br>Publisher\u306f\u3001send\u30e1\u30bd\u30c3\u30c9\u3067\u30a4\u30d9\u30f3\u30c8\u3092publish\u3059\u308b\u3002<br><br>\u53c2\u8003: <a rel=\"noreferrer noopener\" href=\"https:\/\/developer.apple.com\/documentation\/combine\" target=\"_blank\">Apple Developer Documentation | Combine<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publisher \u30a4\u30d9\u30f3\u30c8\u3092\u767a\u884c\u3059\u308b<\/h2>\n\n\n\n<p>Publisher \u3092 subscribe \u3059\u308b\u3053\u3068\u3067\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u4fe1\u3067\u304d\u308b\u3002<br>PassthroughSubject \u30af\u30e9\u30b9<br>CurrentValueSubject \u30af\u30e9\u30b9<br><br>Just\u3068\u306f \u5024\u30921\u56de\u3060\u3051\u51fa\u529b\u3059\u308bPublisher\u3002<br>Future\u306f\u3001\u901a\u4fe1\u51e6\u7406\u306a\u3069\u3067\u5229\u7528\u3057\u3066\u3044\u305f\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u51e6\u7406\u3092Combine\u3067\u5b9f\u88c5\u3059\u308b\u5834\u5408\u306b\u4f7f\u7528\u3059\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Subscriber \u30a4\u30d9\u30f3\u30c8\u3092\u8cfc\u8aad\u3059\u308b<\/h2>\n\n\n\n<p>\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u4fe1\u3059\u308b(\u8cfc\u8aad\u3059\u308b)subscribe\u51e6\u7406<br>assign\u30e1\u30bd\u30c3\u30c9<br>sink\u30e1\u30bd\u30c3\u30c9<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var subscriptions = Set()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Operator \u6d41\u308c\u3066\u304f\u308b\u5024\u3092\u52a0\u5de5\u3059\u308b<\/h2>\n\n\n\n<p>map<br>filter<br>compactMap\u3000\u3000\u3000<br>combineLatest \u306a\u3069<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">API\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3044\u3001\u7d50\u679c\u96c6\u5408\u3092\u30e1\u30f3\u30d0\u5909\u6570\u306b\u683c\u7d0d\u3059\u308b\u30b5\u30f3\u30d7\u30eb<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: swift; title: ; notranslate\" title=\"\">\nimport Foundation\nimport Combine\n\nfinal class SearchUserViewModel: ObservableObject {\n    @Published var text = &quot;&quot;\n    @Published var users = &#x5B;User]()\n    private lazy var subject = PassthroughSubject&lt;Void, Never&gt;()\n    private var cancellables = Set&lt;AnyCancellable&gt;()\n    private let searchUserModel: SearchUserModelProtocol\n    \n    init(searchUserModel: SearchUserModelProtocol) {\n        self.searchUserModel = searchUserModel\n        \n        subject.sink(receiveValue: { _ in\n            searchUserModel.fetchUser(query: self.text)\n                .receive(on: RunLoop.main)\n                .sink(receiveCompletion: { completion in\n                    switch completion {\n                    case .finished:\n                        break\n                    case .failure(let error):\n                        print(error)\n                    }\n                }, receiveValue: {\n                    self.users = $0\n                })\n                .store(in: &amp;self.cancellables)\n            })\n            .store(in: &amp;self.cancellables)\n    }\n    \n    func searchButtonTapped() {\n        subject.send()\n    }\n}\n<\/pre><\/div>\n\n\n<p>\u53c2\u8003:<a rel=\"noreferrer noopener\" href=\"https:\/\/www.hfoasi8fje3.work\/entry\/2021\/09\/13\/\u3010Combine\u3011API\u3068\u306e\u901a\u4fe1\u51e6\u7406\u306bCombine\u3092\u53d6\u308a\u5165\u308c\u308b\uff08dataTaskPublisher\uff09\" target=\"_blank\">\u3010Combine\u3011API\u3068\u306e\u901a\u4fe1\u51e6\u7406\u306bCombine\u3092\u53d6\u308a\u5165\u308c\u308b<\/a><\/p>\n<a href=\"https:\/\/twitter.com\/redwing1300?ref_src=twsrc%5Etfw\" class=\"twitter-follow-button\" data-size=\"large\" data-show-count=\"false\">Follow @redwing1300<\/a><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><div id=\"redwi-918286151\" class=\"redwi- redwi-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-9652476346722993\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-9652476346722993\" \ndata-ad-slot=\"\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u6642\u9593\u304c\u3042\u308b\u3068\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u8abf\u67fb\u306f\u884c\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u6bce\u56de\u307e\u3068\u3081\u308b\u524d\u306b\u5fd8\u308c\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u3053\u3068\u3092\u7e70\u308a\u8fd4\u3057\u3066\u3044\u305f\u306e\u3067\u3001\u4eca\u56de\u306f\u307e\u3068\u3081\u3066\u307f\u305f\u3002\u696d\u52d9\u3067\u3044\u3064\u3082\u6700\u65b0\u306e\u624b\u6cd5\u306e\u307f\u3092\u4f7f\u3063\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u7fd2\u5f97\u3057\u3066\u3082\u307e\u3068\u3081\u3066 &hellip; <a href=\"https:\/\/redwing.moo.jp\/cocoa\/archives\/4664\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46,116],"tags":[371,373,372],"class_list":["post-4664","post","type-post","status-publish","format-standard","hentry","category-ios","category-swift","tag-combine","tag-reactive","tag-swift"],"_links":{"self":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/comments?post=4664"}],"version-history":[{"count":12,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4664\/revisions"}],"predecessor-version":[{"id":4731,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/posts\/4664\/revisions\/4731"}],"wp:attachment":[{"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/media?parent=4664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/categories?post=4664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redwing.moo.jp\/cocoa\/wp-json\/wp\/v2\/tags?post=4664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}