Slide 1

Slide 1 text

.BDΞϓϦΛ࡞ͬͯ Ա͑Δ3Y4XJGU 3Y4XJGUษڧձ4BOTBO !ZJNBKP

Slide 2

Slide 2 text

ࣗݾ঺հ w !ZJNBKP w ਓͰגࣜձࣾΩϡϦΦγςΟ ιϑτ΢ΣΞΛ΍͍ͬͯ·͢ w TUBSH[SOFUͱ͍͏αΠτΛӡ Ӧ͍ͯ͠·͢

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

3FBDUJWF4XJGU.FFUVQ ൃදͷ൒෼͘Β͍ͷਓ͕ .77.ύλʔϯ΍qVYʹ͍ͭͯ࿩ͯͨ͠ͷ͸ ͦ͜ʹڵຯ͕͋Δ͔Βʜ ͦ͏͍͑͹ࡢ೔ʹ͜Μͳͷ͋ͬͨΑͶ

Slide 5

Slide 5 text

࿩͢͜ͱ w 3Y4XJGUͰ௒࣮༻తͳ.BDΞϓϦΛ࡞ͬͨͷͰॱ ংཱͯͯͦͷ࿩Λ͠·͢ w .77.पลʹ͍ͭͯ΋࿩͠·͢

Slide 6

Slide 6 text

લఏ

Slide 7

Slide 7 text

w ࠷ۙ3Y4XJGUΛ࢝ΊͨʮʹΘ͔੎ʯͰ͍͟͝ ·͢

Slide 8

Slide 8 text

w ϦΞΫςΟϒϓϩάϥϛϯάʹ͍ͭͯ஌Βͳ͍ ਓ΋෼͔Δײ͡ͷઆ໌Λ͠·͢

Slide 9

Slide 9 text

w ؒҧ͍΋͋Δͱࢥ͏ͷͰಥͬࠐΜͰ΋Βͬͨ΄ ͏͕ಘΔ΋ͷ͕ଟ͍Ͱ͢

Slide 10

Slide 10 text

w 3Y$PDPB $PDPB&YUFOTJPOT ͷ࿩΋3Y4XJGUͱ ͯ͠࿩͠·͢

Slide 11

Slide 11 text

3Y4XJGUͰ࡞ͬͨ.BD ΞϓϦͱ͸ʁ

Slide 12

Slide 12 text

%&.0 3Y4XJGU@4BOTBOͰπΠʔτ͢Δͱಈ͍͍ͯΔ͸ͣ ಈ͍ͯͳ͔ͬͨΒଈൃදऴྃ

Slide 13

Slide 13 text

εΫϦʔϯγϣοτ

Slide 14

Slide 14 text

͜ͷΞϓϦͷཁ݅ͱ 3Y4XJGUΛ࢖࣮ͬͨ૷

Slide 15

Slide 15 text

ཁ݅ ද͍ࣔͨ͠σΟεϓϨΠΛࣗಈݕग़ ͯ͠બͿ σΟεϓϨΠݕ஌ͰSY@OPUJpDBUJPO

Slide 16

Slide 16 text

SY@OPUJpDBUJPO w /4/PUJpDBUJPOͷSY@OPUJpDBUJPO࢖͏ͱΫϩʔ δϟʹ௨஌࣌Λड͚ͨࡍͷॲཧॻ͚Δ w EJTQPTF#BHΛ࢖͑Δ NSNotificationCenter.defaultCenter() .rx_notification(NSApplicationDidChangeScreenParametersNotification) .subscribeNext { [unowned self] _ in self.tableView.reloadData() } .addDisposableTo(disposeBag)

Slide 17

Slide 17 text

ཁ݅ ݕࡧ͍ͨ͠ϋογϡλάΛೖྗͯ͠ ࣮ߦ SY@UFYU΍SY@UBQ

Slide 18

Slide 18 text

SY@UFYU w 3Y4XJGUͷجૅతͳ࢖͍ํ௨ΓWBMJEBUF w ݕࡧจࣈ͕͋Ε͹ݕࡧϘλϯΛ׆ੑԽ let searchValid = searchField.rx_text .map{ text -> Bool in 0 < text.characters.count } searchValid .bindTo(searchButton.rx_enabled) .addDisposableTo(disposeBag)

Slide 19

Slide 19 text

SY@UBQ w 3Y4XJGUͷجૅతͳ࢖͍ํ௨ΓTVCTDSJCF/FYU w ͚Ͳ࣮͸େͨ͜͠ͱ͠ͳ͍ͳΒ!*#"DUJPOͰ͍͍ʢͳΜͰ΋SYͱ͍ ͏ͷ͸όϥϯε͕ѱ͍൑அͩͱࢥ͏ʣ searchButton.rx_tap .subscribeNext { [unowned self] in // ͜͜ʹtap͞Εͨॲཧॻ͘ } .addDisposableTo(disposeBag)

Slide 20

Slide 20 text

ཁ݅ πΠʔτΛӈ͔Βࠨʹ "1*ͷ݁ՌΛ1VCMJTI4VCKFDU

Slide 21

Slide 21 text

5XJUUFS"1*ͷ݁ՌΛ1VCMJTI4VCKFDU w πΠʔτ͕ݟ͔ͭͬͨΒPO/FYU w "1*ͷΤϥʔͳΒPO&SSPS w ͦΕΛ4VCTDSJCFͯ͠7JFXΛ࡞Δ

Slide 22

Slide 22 text

ཁ݅ ΞϓϦͷঢ়ଶ΋πΠʔτͷΑ͏ʹը ໘ʹදࣔͯ͋͛͠Δ 0CTFSWBCMFΛJOUFSWBMͰఆظతʹ

Slide 23

Slide 23 text

JOUFSWBMͰఆظతʹ0CTFSWBCMFͳ΋ͷΛ w ඵ͝ͱʹ"OOPVODF͍ͬͯ͏4USVDUΛ࡞Δ return Observable .interval(60.0, scheduler: MainScheduler.instance) .map { _ in return Announce(id: NSUUID().UUIDString, text: announceText) }

Slide 24

Slide 24 text

ͭͷετϦʔϜΛNFSHF͢Δ ཁ݅ ʮπΠʔτʯ΋ʮΞϓϦ͔Βͷ৘ใ௨஌ʯ΋ σΟεϓϨΠӈ͔Βࠨʹྲྀ͢ͷͰҰͭͷ ετϦʔϜʹͳͬͯΕ͹͍͍

Slide 25

Slide 25 text

NFSHF 5XJUUFS"1*઒ 1VCMJTI4VCKFDU$PNNFOU5ZQF ΞϓϦͷϝοηʔδ઒ 0CTFSWBCMF$PNNFOU5ZQF $PNNFOU5ZQFͱ͍͏ϓϩτίϧͭ͘Δ &MFNFOU͕ಉ͡͡Όͳ͍ͱNFSHFͰ͖ͳ͍ͷͰ

Slide 26

Slide 26 text

// Commentϓϩτίϧ protocol CommentType { func type() -> Comment func identifier() -> String func message() -> String func imageURL() -> NSURL? } enum Comment { case Tweet case Announce } // TweetΛJSON͔ΒΤϯςΟςΟԽ // HimotokiͷDecodableΛܧঝ struct Tweet: Decodable { //…লུ… } // ϓϩτίϧͷ࣮૷෦ extension Tweet: CommentType { //…লུ… } // ΞϓϦ͔Βͷϝοηʔδ৘ใ struct Announce: CommentType { //…লུ… }

Slide 27

Slide 27 text

౧ϓϩτίϧʹै͍ͬͯ͑͞Ε͹͍͍

Slide 28

Slide 28 text

NFSHFͱ͔ ετϦʔϜ߹੒ͷྑ͞ʹ͍ͭͯ ΋͏গ͠ ʢ௒ࢲݟʣ

Slide 29

Slide 29 text

ϝιουGͷݺͼग़͠ ϝιουGͷݺͼग़͠ ϝιουGͷݺͼग़͠ ϝιουGͷݺͼग़͠ ॲཧ" ॲཧ#ͱ৚݅ ௨஌$ ॲཧ"ͷετϦʔϜ ॲཧ#ͷετϦʔϜ ௨஌$ͷετϦʔϜ ϦΞΫςΟϒ ϓϩάϥϛϯά෩ͳ ϝιουΛ ౎౓ݺͼग़͢ͱ

Slide 30

Slide 30 text

Ͱ ͜ͷ.BDΞϓϦ͍ͭ ϦϦʔε͢ΔΜͰ͢ʁ

Slide 31

Slide 31 text

ʜϦϦʔε͠ͳ͍ ʢ.BDͷσϕϩούϥΠηϯε͸ ࣋ͬͯͳ͍͠ʣ

Slide 32

Slide 32 text

҆৺ͯ͠Լ͍͞

Slide 33

Slide 33 text

ίʔυ͸ެ։͞Ε͍ͯ·͢ IUUQTHJUIVCDPNZJNBKP.FFUVQ5XFFU ˒Λ͚ͭͯ๨Εͳ͍Α͏ʹ͓ͯ͘͠ͱྑ͍Ͱ͢Ͷ

Slide 34

Slide 34 text

࣍ʹ ެ։͞ΕͨίʔυΛར༻͢ΔͨΊͷ࿩ IUUQTHJUIVCDPNZJNBKP.FFUVQ5XFFU

Slide 35

Slide 35 text

5XJUUFSͷ"1*,FZͱ 4FDSFU͕ඞཁͰ͢ IUUQTHJUIVCDPNZJNBKP.FFUVQ5XFFU

Slide 36

Slide 36 text

Ϋϥεߏ੒͸ʁ 3Y4XJGU࢖ͬͨ.77.ͳͷʁ

Slide 37

Slide 37 text

5XJUUFSͷ,FZೖྗ͸.77. "VUI 7JFX.PEFM w $POTVNFS,FZͱ 4FDSFUΛWBMJEBUF͢Δ w ໰୊ͳͦ͞͏ͳΒϒϥ ΢βىಈ͢Δ "VUI 7JFX$POUSPMMFS w $POTVNFS,FZͱ 4FDSFUΛೖྗͤ͞ w "VUI7JFX.PEFMʹ 0"VUI4XJGU w 0"6UIͷ ॺ໊Λ࡞੒ Ͱ͖Δ

Slide 38

Slide 38 text

5XFFU4FBSDI 7JFX$POUSPMMFS $PNNFOU'MPX 1SFTFOUFS w 6*͔ΒͷΠϕϯτΛॲཧ w ݕࡧ͢ΔจݴΛೖྗ w දࣔ͢Δը໘ΛબͿ w 5XFFU4USFBN"1*ͷ 6TF$BTFΛݺͼग़͢ w "OOPVODF6TF$BTFΛݺ ͼग़͢ w NFSHF͠TVCTDSJCF w 7JFXʹͯ͠ը໘্ʹྲྀ͢ 5XJUUFS4USFBN"1* 6TF$BTF w 5XJUUFS4USFBN"1*Λݺ ͼग़͠1VCMJTI4VCKFDU "OOPVODF 6TF$BTF w ΞϓϦ͕ࣗಈͰදࣔ͢Δ ίϝϯτΛ0CTFSWBCMF ʹ 1SFTFOUBUJPO૚ %PNBJO૚ *OGSB૚ 5XJUUFS"1* )JNPUPLJ 5XFFUදࣔ͸ϨΠϠʔυ෩ΞʔΩςΫνϟ ࢀߟ IUUQTUFDISFDSVJUNQDPKQNPCJMFQPTU w )JNPUPLJ͸͍͍ͧ w 4USFBN"1* Λݺͼग़ͤΔ

Slide 39

Slide 39 text

8IZ ϨΠϠʔυ෩ΞʔΩςΫνϟ w ΋͏.PEFMͱ͍͏༻ޠ࢖͏ͷ΍Ί·ͤΜʁ w ௕͘ͳΔͷͰ࠙਌ձͰ࿩͠·͠ΐ͏

Slide 40

Slide 40 text

·ͱΊ

Slide 41

Slide 41 text

खΛಈ͔͞ͳ͍ͱ3Y4XJGUΛशಘ͢Δͷ͸ ೉͍͠ ʮNFSHFͬͯҙຯෆ໌͚ͩͬͨͲ͜͜Ͱ࢖͏ͷ͔ʯ

Slide 42

Slide 42 text

͔͠͠࢓ࣄͰѻ͍ͬͯΔϓϩμΫγϣϯʹ ͍͖ͳΓೖΕΔͷ΋೉͍͠ 3YʹϩοΫΠϯͯ͠͠·͏ϦεΫ

Slide 43

Slide 43 text

3Y4XJGU࢖ͬͨ J1IPOFΞϓϦΛ࡞Ζ͏ͱࢥͬͯ΋ཉ͍͠΋ͷ ͸͢Ͱʹ͋ͬͨΓ͢Δ

Slide 44

Slide 44 text

ͩͬͨΒ .BDΞϓϦ࡞Γ·͠ΐ͏ .BD࢖ͬͯͯෆศͩͱࢥ͏Α͏ͳ͜ͱ͋Δͱ ࢥ͏

Slide 45

Slide 45 text

࡞Γ͍ͨ.BDΞϓϦ͕ͳ͍ ˣ !ZJNBKP͕3Y4XJGUؚΉ ٕज़ΞυόΠε੥͚ෛ͍·͢Αʂʂ ͝૬ஊԼ͍͞

Slide 46

Slide 46 text

͓ΘΓ ܁Γฦ͠ʹͳΓ·͕͢ ˒Λ͚ͭͯ๨Εͳ͍Α͏ʹ͓͖ͯ͠ Ջͳ࣌ʹ1VMM3FRVFTU͘ΕΔͱخ͍͠Ͱ͢ IUUQTHJUIVCDPNZJNBKP.FFUVQ5XFFU