Slide 1

Slide 1 text

QPUBUPUJQT !ZJNBKP 4XJGUʹΘ͔੎ͳࣗ෼͕ .BDΞϓϦΛ࡞ͬͯ3Y4XJGUΛ ࢖͑ΔΑ͏ʹͳͬͨ࿩

Slide 2

Slide 2 text

< > ͜ͷ"SSBZͷҙຯ Θ͔Γ·͔͢ʁ

Slide 3

Slide 3 text

-ਖ਼ղ͸- ࢲ͕potatotipsͰൃදͨ͠ճͷ൪߸ΛArrayʹ͚ͨͩ͠ < > ͜ͷ"SSBZͷҙຯ Θ͔Γ·͔͢ʁ

Slide 4

Slide 4 text

ࣗݾ঺հ w !ZJNBKP w QPUBUPUJQTճ໨ͷൃද w Έͳ͞Μొ࿥ͯ͠Δͱ͸ࢥ͏Μ Ͱ͕͢TUBSH[SOFUͱ͍͏αΠ τΛӡӦ͍ͯ͠·͢ w ΠϯλϏϡʔ͞Εͯ΋ྑ͍Αͱ ͍͏ํ͕͍Ε͹ڭ͑ͯԼ͍͞

Slide 5

Slide 5 text

ϦΫϧʔτ͞Μͷ5FDI-BC1"",ͱ͍͏ ແྉͷίϫʔΩϯάεϖʔεΛ͓आΓͯ͠ίʔυॻ͍͍ͯ·͢

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

લఏ

Slide 8

Slide 8 text

w 3Yʹ͍ͭͯ஌Βͳ͍ਓ΋෼͔Δײ͡ͷઆ໌Λ͠ ·͢

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 QPUBUPUJQTͰπΠʔτ͢Δͱಈ͍͍ͯΔ͸ͣ ಈ͍ͯͳ͔ͬͨΒଈൃදऴྃ ʢϒϩά࿮తʹ͜ͷࣸਅΛࡱ͓ͬͯ͘ͱө͑·͢ʣ

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

ಛ௃ πΠʔτΛӈ͔Βࠨʹ 8FC"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

ͭͷετϦʔϜΛ߹੒͢Δ ಛ௃ ʮπΠʔτʯ΋ʮΞϓϦ͔Βͷ৘ใ௨஌ʯ΋ σΟεϓϨΠӈ͔Βࠨʹྲྀ͢

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

// ϓϩτίϧ 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

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

Slide 29

Slide 29 text

͓ߴ͍ΜͰ͠ΐ͏

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 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 35

Slide 35 text

·ͱΊ

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

ͩͬͨΒ .BDΞϓϦ࡞Γ·͠ΐ͏ .BD࢖ͬͯͯෆศͩͱࢥ͏͜ͱΛղܾ͠Α͏

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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