Slide 1

Slide 1 text

1

Slide 2

Slide 2 text

Tips 1. guard ͰૣظϦλʔϯ͢Δ 2. Result Ͱ੒ޭ/ࣦഊΛද͢ 3. ʢ͓·͚ʣFRP Λ࢖͏ͱΠϕϯτॲཧ͕ಡΈ΍͘͢ͳΔ 2

Slide 3

Slide 3 text

1. guard ͰૣظϦλʔϯ͢Δ 3

Slide 4

Slide 4 text

guard ͰૣظϦλʔϯ͢Δ if ৚݅ { ϝΠϯॲཧ } else { Τϥʔॲཧ } --- guard ৚݅ else { Τϥʔॲཧ return // <- returnΛ๨Εͳ͘ͳΔʂ } ϝΠϯॲཧ // <- ωετ͕ઙ͘ͳΔʂ 4

Slide 5

Slide 5 text

swi$3ͷ guard [SE-0099] ACCEPTED: Restructuring Condi;on Clauses // swift2 guard let x = optional where y == 2 else { // swift3 guard let x = optional, y == 2 else { 5

Slide 6

Slide 6 text

2. Result Ͱ੒ޭ/ࣦഊΛද͢ 6

Slide 7

Slide 7 text

Result ͱ͸ ੒ޭ / ࣦഊΛද͢enum enum Result { case Success(T) case Failure(E) } 7

Slide 8

Slide 8 text

Result Ͱ੒ޭ/ࣦഊΛද͢ // Resultͳ͠ʢObjective-Cతͳॻ͖ํʣ fetchData(callback: { (data: AnyObject?, error: NSError?) in // data == nil && error == nil ͷ৔߹Ͳ͏͠Α͏! // data != nil && error != nil ͷ৔߹Ͳ͏͠Α͏! }) // ResultΛ࢖͏ fetchData(callback: { (result: Result) in switch result { case .Success(let value): // value͸nilͰ͸ͳ͍" case .Failure(let error): // error͸nilͰ͸ͳ͍" } }) 8

Slide 9

Slide 9 text

Result ิ଍ • OSS: an(typical/Result • σϑΝΫτελϯμʔυʢReac(veCocoa / APIKitͳͲར༻ʣ • throw (swi=2~)ͱͷؔ܎ • Swi= 2 Error Handling vs Result by Yasuhiro Inami 9

Slide 10

Slide 10 text

ͦͷଞͷTips • nested function ͰॲཧΛ·ͱΊΔ • op%onalΛద੾ʹઃఆ͢Δ ʢεϥΠυิ଍Λࢀর͍ͯͩ͘͠͞ʣ 10

Slide 11

Slide 11 text

3. ʢ͓·͚ʣFRP Λ࢖͏ͱ Πϕϯτॲཧ͕ಡΈ΍͘͢ͳΔ 11

Slide 12

Slide 12 text

Func$onal Reac$ve Programming ͷಛ௃ • ϦΞΫςΟϒͰ͋ΔʢΠϕϯτΛݕ஌ͯ͠దԠ͢Δʣ • એݴతʹॻ͚Δʢ㲈ؔ਺ܕతʣ -> ཧղ͠΍͍͢ίʔυʹͳΔ ʢίʔυΛಡΊ͹ɺॲཧ಺༰Λ೺ѲͰ͖Δʣ 12

Slide 13

Slide 13 text

ྫ • ʢετϦʔϜͷϚʔδͷྫʣ • Ξϥʔτදࣔ͢Δ • ΩϟϯηϧϘλϯΛλοϓͯ͠ด͡Δ • എܠλοϓͯ͠΋ด͡Δ 13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

FRP Λ࢖͏ͱΠϕϯτॲཧ͕ಡΈ΍͘͢ͳΔ • ϦΞΫςΟϒͰ͋ΓɺએݴతͰ͋Δ • ӡ༻͢Δ্Ͱ΋ɺࠩ෼ɾมߋ͕෼͔Γ΍͍͢ • ʮίʔυͷཧղ͠΍͢͞ʯͱ͍͏؍఺͔Β΋ಋೖݕ౼ͷՁ஋͋ Γ 18

Slide 19

Slide 19 text

Tips 1. guard ͰૣظϦλʔϯ͢Δ 2. Result Ͱ੒ޭ/ࣦഊΛද͢ 3. ʢ͓·͚ʣFRP Λ࢖͏ͱΠϕϯτॲཧ͕ಡΈ΍͘͢ͳΔ 19

Slide 20

Slide 20 text

Swi$ΤϯδχΞืूத! • ͖Ε͍ͳUIͷΞϓϦ͕࡞Γ͍ͨʂ • ӡ༻ΑΓ৽ن։ൃ͕͍ͨ͠ʂ • ٕज़తʹ΋ઃܭϑΣʔζ͔Βͩ͜ΘΓ ͍ͨʂ ࡉ෦·Ͱͩ͜ΘͬͨσβΠϯΛ࣮૷ͨ͠ ͍iOSΤϯδχΞืूʂ 20

Slide 21

Slide 21 text

Thank you! 21

Slide 22

Slide 22 text

ࢀߟ • Ϧʔμϒϧίʔυ――ΑΓྑ͍ίʔυΛॻͨ͘ΊͷγϯϓϧͰ࣮ફతͳ ςΫχοΫ • Swi& 2 Error Handling vs Result by Yasuhiro Inami • Safer Networking Layer With Swi& by Yusei Nishiyama • ReacHveCocoa • APIKit • this week in Swi& 22

Slide 23

Slide 23 text

ิ଍ 23

Slide 24

Slide 24 text

nested function ͰॲཧΛ·ͱΊΔ 24

Slide 25

Slide 25 text

nested function ͰॲཧΛ·ͱΊΔ • Α͋͘Δྫ func viewDidLoad() { super.viewDidLoad() configureSomeView() } private func configureSomeView() { } • nested function Ͱ·ͱΊΔͱɾɾɾ • ʮಛఆͷؔ਺ͷதͰ࢖͏ʯ͜ͱ͕໌֬ʹͳΔ • ଞͷॲཧ಺Ͱ࢖ΘΕΔڪΕ͕ͳ͍ func viewDidLoad() { func configureSomeView() { } super.viewDidLoad() configureSomeView() } 25

Slide 26

Slide 26 text

op#onalΛద੾ʹઃఆ͢Δ 26

Slide 27

Slide 27 text

op#onalͷҙຯ • non-op&onal • ઈରʹ஋͕͋Δ • ? (op&onal) • nilʹͳΔՄೳੑ͕͋Δ • ! (Implicitly Unwrapped Op&onal) • nil͸ೖΒͳ͍͕ʢswi;΍frameworkͷ࢓૊Έ্ʣҰ୴ɺnilͰॳظ Խͤ͟ΔΛಘͳ͍ 27

Slide 28

Slide 28 text

IUOΛ࢖͏΂͖ঢ়گ • IBOutlet • VCʹViewModelɺDataSourceͳͲΛinject͍ͨ͠ && storyboard࢖༻ • storyboardΛ࢖͏ͱɺVCͷಠࣗini9alizerΛ࢖͑ͳ͍ • ແཧʹop9onal(?)ʹ͢ΔΑΓɺIUOʹͯ͠ઃܭͷҙਤΛ໌Β͔ ʹ͢Δ 28

Slide 29

Slide 29 text

ʢࢀߟʣstoryboard vs dependency injec1on • Init based Storyboard View Controller Instan4a4on by Javi Soto • ObjCͷίʔυΛ࢖͏ͱɺstoryboardར༻࣌Ͱ΋ಠࣗini4alizerΛ࢖͑Δɻʢ͔͠ ͠ɺϓϩύςΟ͸IUOͷ··ʣ • Building Fabric.app in SwiB by Javi Soto • View Controller Data Injec4on with Storyboards and Segues in SwiB by Natasha The Robot • ίϝϯτͰٞ࿦͕ߦΘΕ͍ͯΔ • protocolͰಡΈ΍͘͢͢Δํ๏͕঺հ͞Ε͍ͯΔ 29

Slide 30

Slide 30 text

ʢࢀߟʣswi$3ͷIUO • IUOΛผͷม਺ʹ୅ೖͨ࣌͠ͳͲͷڍಈʢܕʣ͕มΘΔ • WWDC 2016: Increased Safety in Swi; 3.0 by Big Nerd Ranch 30