Slide 1

Slide 1 text

ը໘ભҠ͕བྷΉ஋ͷड͚౉͠Λ 3Y4XJGUͰ௚ྻԽͯ͠Έͨ !QPUBUPUJQT

Slide 2

Slide 2 text

struct Me { let name = "Takuhiro Muta" let aka = "417.72KI" let experienceYears = 5 let company = "iRidge inc." let twitter = "417_72ki" let qiita = "417_72ki" let gitHub = "417-72KI" let like = [ "BEMANI", "Real Escape Game", "Bang Dream!", "LoveLive! Sunshine!!", "etc…" ] } TFMGEFTDSJQUJPO

Slide 3

Slide 3 text

࿩͢͜ͱ w ՝୊ͱΞϓϩʔνྫ

Slide 4

Slide 4 text

࿩͞ͳ͍͜ͱ w 3Y4XJGUʹ͍ͭͯ w ࢓૊Έͱ͔ܕͱ͔ w ֤छΞʔΩςΫνϟʹͲ͏ద༻͢Δ͔

Slide 5

Slide 5 text

ී௨ͷෳࡶͳॲཧϑϩʔ "ͱ௨৴͢Δ "ͷ݁ՌΛ࢖ͬͯ#ͱ௨৴͢Δ #ͷ݁ՌΛ࢖ͬͯ$ͱ௨৴͢Δ

Slide 6

Slide 6 text

ී௨ͷෳࡶͳॲཧϑϩʔ func connectA() -> Single func connectB(resultOfA: String) -> Single func connectC(resultOfB: String) -> Single func doSomething() { connectA() .flatMap(connectB) .flatMap(connectC) .subscribe(onSuccess: { // ࠷ऴ݁ՌͰԿ͔͢Δ }, onError: { print($0) }) .disposed(by: disposeBag) }

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

ࠓճͷ՝୊ ྫ "ͱ௨৴͢Δ "ͷ݁ՌΛ8FC7JFXʹૹͬͯ Ϣʔβʔʹૢ࡞ͤ͞Δ Ϣʔβʔ͕ૢ࡞ͨ݁͠ՌΛ ϑοΫͯ͠$ͱ௨৴͢Δ 8FC7JFX$POUSPMMFS QSFTFOU7JFX$POUSPMMFS 8FC7JFX%FMFHBUF EJTNJTT7JFX$POUSPMMFS 8FC7JFX$POUSPMMFS %FMFHBUF

Slide 9

Slide 9 text

ࠓճͷ՝୊ ྫ func doSomething() { connectA() .subscribe(onSuccess: { [unowned self] in let webView = // initialize WebViewController webView.delegate = self webView.param = $0 self.present(webView, animated: true) }, onError: { print($0) }) .disposed(by: disposeBag) } // MARK: - WebViewControllerDelegate func webViewDidRespondSomething(_ value: String) { connectC(resultOfB: value) .subscribe(onSuccess: { // ࠷ऴ݁ՌͰԿ͔͢Δ print($0) }, onError: { print($0) }) .disposed(by: disposeBag) }

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

8FC7JFX$POUSPMMFSʹ 0CTFSWFSΛஔ͚͹ ௚ྻԽͰ͖ΔͷͰ͸ʁ

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

΍ͬͨ͜ͱ w ݺͼग़͢7$ʹ0CTFSWFSΛஔ͘ w ݺͼग़͠ॲཧΛQSPUPDPMʹ͢Δ

Slide 15

Slide 15 text

ݺͼग़͢7$ʹ 0CTFSWFSΛஔ͘ class WebViewController: UIViewController { var param: String! private let resultSubject = PublishSubject() // ҎԼུ } extension WebViewController { var result: Maybe { return resultSubject.asMaybe() } }

Slide 16

Slide 16 text

ݺͼग़͢7$ʹ 0CTFSWFSΛஔ͘ // MARK: - WKNavigationDelegate extension WebViewController: WKNavigationDelegate { override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { guard let result = doSomething(fromRequest: navigationAction.request) else { return } decisionHandler(.cancel) dismiss(animated: true) { [unowned self] in self.resultSubject.onNext(result) self.resultSubject.onCompleted() } }

Slide 17

Slide 17 text

ݺͼग़͠ॲཧΛ QSPUPDPMʹ͢Δ protocol WebViewOpenable { /// paramΛWebViewʹૹͬͯ݁ՌΛड͚औΔ func requestToWeb(withParam param: String) -> Maybe }

Slide 18

Slide 18 text

ݺͼग़͠ॲཧΛ QSPUPDPMʹ͢Δ extension WebViewOpenable where Self: UIViewController { func requestToWeb(withParam param: String) -> Maybe { guard let nav = R.storyboard.webView.instantiateInitialViewController(), let webView = nav.viewControllers.first as? WebView else { assertionFailure("Something wrong in WebView.storyboard") return Observable.error(CommonError.unknown) } webView.param = param defer { present(nav, animated: true) } return webView.result } }

Slide 19

Slide 19 text

ݩͷίʔυ func doSomething() { connectA() .subscribe(onSuccess: { [unowned self] in let webView = // initialize WebViewController webView.delegate = self webView.param = $0 self.present(webView, animated: true) }, onError: { print($0) }) .disposed(by: disposeBag) } // MARK: - WebViewControllerDelegate func webViewDidRespondSomething(_ value: String) { connectC(resultOfB: value) .subscribe(onSuccess: { // ࠷ऴ݁ՌͰԿ͔͢Δ print($0) }, onError: { print($0) }) .disposed(by: disposeBag) }

Slide 20

Slide 20 text

௚ྻԽ͞Εͨίʔυ func doSomething() { connectA() .flatMap(requestToWeb) .flatMap(connectC) .subscribe(onSuccess: { // ࠷ऴ݁ՌͰԿ͔͢Δ print($0) }, onError: { print($0) }) .disposed(by: disposeBag) }

Slide 21

Slide 21 text

௚ྻԽ͞Εͨίʔυ func doSomething() { connectA() .flatMap { [unowned self] in self.requestToWeb(withParam: $0) } .flatMap { [unowned self] in self.connectC(resultOfB: $0) } .bind(to: resultLabel.rx.text) .disposed(by: disposeBag) }

Slide 22

Slide 22 text

݁Ռ w ը໘ભҠ͕བྷΉΑ͏ͳॲཧϑϩʔ΋ભҠઌʹ 0CTFSWFSΛஔ͘͜ͱͰqBU.BQCJOEͰܨ͛Β ΕΔΑ͏ʹͳͬͨ w ॲཧதʹը໘ભҠ͕ൃੜ͢Δ͜ͱΛϑϩʔͷத Ͱҙࣝ͠ͳͯ͘΋ྑ͘ͳͬͨ w 1VCMJTI4VCKFDUJT༏ल

Slide 23

Slide 23 text

4BNQMF w IUUQTHJUIVCDPN,* 3Y4DSFFO5SBOTJUJPO4BNQMF

Slide 24

Slide 24 text

No content