Slide 1

Slide 1 text

੍ޚߏจ1 MOBILEPROGRAMMING OCT, 10TH

Slide 2

Slide 2 text

ςΩετ ੍ޚߏจʂ ▸ if΍forͳͲ෼ذ΍܁Γฦ͠ॲཧΛಛఆͷจʹߏ଄Խͨ͠΋ͷ ▸ ϓϩάϥϜͷߏ଄͸ ॱ࣍ɺબ୒ɺ൓෮ͷࡾͭʹ෼ྨ͞ΕΔ ▸ ͜ΕΒΛ૊Έ߹Θͤͯϓϩάϥϛϯά͢Δํ๏Λߏ଄Խϓϩ άϥϛϯάͱݺͿ ▸ SwiftͰ͸ “ifจ” Ͱ͕͢ ݴޠʹΑͬͯ͸ “ifࣜ” ͱݺͿ͜ͱ΋͋ Γ·͢ ▸ ࠓճ͸৚݅෼ذͷߏจʹߜͬͯ΍ͬͯߦ͖·͢

Slide 3

Slide 3 text

ςΩετ จʁࣜʁ(͓·͚) ▸ ࣜͱจͷҧ͍͸ ஋Λฦ͔͢൱͔Ͱ͢ ▸ ྫ͑͹ “ifจ” ͸஋Λฦ͞ͳ͍ͷͰӈͷྫͷΑ͏ͳ͜ͱ͸Ͱ͖ ·ͤΜ let message = if age > 18 { "੒ਓͰ͢" } else { "ະ੒೥Ͱ͢" } let message: String if age > 18 { message = "੒ਓͰ͢" } else { message = "ະ੒೥Ͱ͢" } จͷ৔߹ ࣜͷ৔߹

Slide 4

Slide 4 text

1. IF

Slide 5

Slide 5 text

ςΩετ IFจ ▸ ৚݅ʹΑͬͯॲཧΛ෼ذ͍ͤͨ͞ͱ͖ʹ͸ifΛ࢖͍·͢ ▸ จ๏͸ ▸ if <৚݅ࣜ> { /* ৚͕݅ਖ਼ͷ࣌ */ } else { /* ৚͕݅ෛͷ࣌ */ } ▸ ͱͳΓ·͢ ▸ ৚͕݅ෳ਺͋Δ৔߹͸ else if ΋࢖͑·͢

Slide 6

Slide 6 text

ςΩετ ྫจ // جຊܗ let age = 20 if age >= 20 { print("੒ਓͯ͠·͢ʂ") } else { print("ະ੒೥Ͱ͢") } // ৚͕݅ෳ਺͋Δ৔߹ if age >= 18 { print("େֶੜͰ͢") } else if age >= 15 { print("ߴߍੜͰ͢") } else if age >= 12 { print("࣮͸ຐ଒ͩͬͨࢲ͸தֶੜ……গͳ͘ } else { print("খֶੜͰ͢") } // else͸লུՄೳ if age >= 20 { print("੒ਓͯ͠·͢ʂ") }

Slide 7

Slide 7 text

SWIFTͷIF͸৚݅෼ ذ͚ͩ͡Όͳ͍ʂ

Slide 8

Slide 8 text

1-2. IF-LET

Slide 9

Slide 9 text

ςΩετ IF-LET? ▸ Optionalܕ(Ex: Int?)͔Β஋Λ҆શʹऔΓग़͢ํ๏ ▸ Optional-binding(ΦϓγϣφϧόΠϯσΟϯά)ͷҰͭ ▸ if-let ࣜͱݺ͹ΕΔ ▸ ৚݅෼ذͱ͚ͯͩ͠Ͱͳͪ͘͜Β΋ඇৗʹΑ͘࢖ΘΕΔ ▸ จ๏͸ ▸ if let <ม਺໊> = { /* not nil */ } else { /* nil */ }

Slide 10

Slide 10 text

ςΩετ ྫจ // جຊܗ let age: Int? = 20 if let a = age { print("๻͸ \(a)ࡀͰ͢ʂ") } else { print("೥ྸ͸͋Γ·ͤΜ") } // if-let + ৚݅෼ذ let age: Int? = 20 if let a = age, a >= 20 { print("๻͸ \(a)ࡀͰɺ੒ਓͯ͠·͢ʂ") }

Slide 11

Slide 11 text

2. GUARD

Slide 12

Slide 12 text

ςΩετ GUARDจ ▸ Swiftಠࣗͷߏจ ▸ จ๏͸ guard <৚݅ࣜ> else { /* returnͤ͞Δ */ } ▸ ifͱҧ͍৚݅ʹϚονͨ͠৔߹ॲཧΛਐΊɺϚον͠ͳ͍৔߹͸ else ͷϒϩοΫͷ தʹೖΓͦΕҎ্ॲཧΛਐ·ͤͳ͍Α͏ʹ͠·͢ ▸ else ϒϩοΫͷதʹ͸ ඞͣ return Λهड़͢Δඞཁ͕͋Γ·͢ɻ ▸ ৚݅ʹϚον͠ͳ͔ͬͨ৔߹ʹreturnͤ͞ΔΑ͏ʹॲཧΛॻ͘͜ͱΛGuardઅͱݴ͍ ·͢ ▸ Swiftʹ͸ guard ͱ͍͏ guardઅઐ༻ͷߏจ͕͋Γ·͕͢ଞͷݴޠͰ͸ if Λ࢖࣮ͬͯ ݱ͠·͢

Slide 13

Slide 13 text

ςΩετ ྫจ func forAdult(age: Int) { guard age >= 18 else { print("ݟͤΒΕͳ͍Αʂ") return // ͜ΕΛॻ͔ͳ͍ͱΤϥʔ } print("Welcome to Underground...") } func forAdult(age: Int) { if age < 18 { print("ݟͤΒΕͳ͍Αʂ") return } print("Welcome to Underground...") } ࠨͷೋͭ͸ಉ͡ॲཧΛͯ͠Δ

Slide 14

Slide 14 text

2-2. GUARD-LET

Slide 15

Slide 15 text

ςΩετ GUARD-LET ▸ if-letͱಉ͘͡ guard-letࣜ΋͋Γ·͢ ▸ جຊతʹ͸guardͱಉ͡Ͱ͢ ▸ ҧ͍͸ nil ͩͬͨΒઌʹਐ·ͤͳ͍ͱ͍͏͜ͱ͘Β͍ ▸ จ๏͸ ▸ guard let <ม਺໊> = else { /* return */ }

Slide 16

Slide 16 text

ςΩετ ྫจ func parseResponse(responseData: [String: Any]?) -> String? { // check response guard let data = responseData else { print("response data is empty") return nil } guard let id = data["id"] as? String else { print("user id is not found.") return nil } return id } ωοτϫʔΫܦ༝Ͱऔಘͨ͠σʔλΛύʔε͢Δ

Slide 17

Slide 17 text

3. SWITCH

Slide 18

Slide 18 text

ςΩετ SWITCHจ ▸ ifͱಉ͘͡৚݅෼ذ, optional-bindingΛ͢Δͱ͖ʹ࢖͏ ▸ ݹ͍ݴޠͩͱ Int΍FloatͳͲ͔͠࢖͑ͳ͍͕SwiftͰ͸جຊత ʹԿͰ΋Ϛονϯάͤ͞ΒΕΔ ▸ breakΛॻ͔ͳͯ͘΋ॲཧ͕࣍ʹҠΒͳ͍(fall-through͠ͳ͍) ▸ ৚݅ʹ߹கͤ͞Δ͜ͱΛύλʔϯϚονͱݺΜͩΓ͢Δ ▸ ΊͪΌͪ͘Όศར

Slide 19

Slide 19 text

ςΩετ SWITCHจ ▸ จ๏͸ switch <஋> { case <৚݅ࣜ1>: /* ॲཧ1 */ case <৚݅ࣜ2>: /* ॲཧ2 */ case <৚݅ࣜ3>: /* ॲཧ3 */ default: /* ͦΕҎ֎ */ }

Slide 20

Slide 20 text

3-1. Ϛονϯά ʹ͍ͭͯ

Slide 21

Slide 21 text

3-1-1. ஋Ϛον ϯά

Slide 22

Slide 22 text

ςΩετ ஋Ϛονϯά ▸ γϯϓϧʹಛఆͷ஋Λࢦఆͯ͠Ϛονϯάͤ͞Δํ๏ ▸ Intͷ৔߹͸஋͕ 10ͩͬͨΒ, 20ͩͬͨΒͱ͍͏ܗ ▸ ΧϯϚͰ۠੾ͬͯෳ਺ͷ஋Λฒ΂Δ͜ͱ΋Ͱ͖Δ let age = 20 switch age { case 20: print("੒ਓͰ͢") case 13, 14, 15: print("தֶੜͰ͢") case 12: print("খֶੜͰ͢ʂ") default: print("όϒʔʂ") }

Slide 23

Slide 23 text

3-1-2. ൣғϚο νϯά

Slide 24

Slide 24 text

ςΩετ ൣғϚονϯά ▸ ԋࢉࢠͷͱ͖ʹར༻ͨ͠ ൣғԋࢉࢠΛར༻ͯ͠Ϛονϯάͤ͞Δ͜ͱ΋Մೳ ▸ Intͷ৔߹͸஋͕ 10~20ͩͬͨΒͱ͍͏ܗ let age = 20 switch age { case 16...18: print("੒ਓͰ͢") case 13..<16: print("தֶੜͰ͢") case 6..<13: print("খֶੜͰ͢ʂ") default: print("όϒʔʂ") }

Slide 25

Slide 25 text

3-1-3. λϓϧ Ϛονϯά

Slide 26

Slide 26 text

ςΩετ λϓϧ(TUPLE)ʁ ▸ SwiftͰ࢖ΘΕΔσʔλߏ଄ͷҰͭ ▸ ΧϯϚͰ۠੾ΒΕͨϦετ ▸ Arrayͱ͸ҧ͍ෳ਺ͷܕΛ࣋ͭ͜ͱ͕Ͱ͖Δ ▸ ཁૉΛ࣋ͯΔ্ݶ͕ܾ·͍ͬͯΔͨΊɺArrayͷΑ͏ʹ͸࢖Θͳ͍ ▸ ↓ҎԼͷΑ͏ͳײ͡ ▸ let tuple = (10, “yuichiro”, 34.5, [“gas”, “gas”, “gas”]) ▸ ઌ಄ͷཁૉ͔Β tuple.0, tuple.1 ͱ͍͏ܗͰΞΫηε͢Δ ▸ ཁૉʹ໊લ(ϥϕϧ)Λ͚ͭΔ͜ͱ΋Մೳ(໊લ෇͖λϓϧ) ▸ let tuple = (number: 10, string: “yuichiro”, float: 34.5, array: [“gas”, “gas”, “gas”])

Slide 27

Slide 27 text

ςΩετ λϓϧϚονϯά ▸ ઌ΄Ͳઆ໌ͨ͠TupleΛར༻ͯ͠Ϛονϯάͤ͞Δ͜ͱ΋Մೳ ▸ tupleͷཁૉͷ਺΍஋ͰϚονϯάͤ͞Δ switch user { case let (age, name): print("user is age: \(age), name: \(name)") case (let age, "hogefuga"): print("user is age: \(age), name: hogefuga") case (20, let name): print("user is age: 20, name: \(name)") case (20, "hogefuga"): print("user is age: 20, name: hogefuga") case let (age, name, gender): print(“Ϛον͠·ͤΜ") default: print("something else") }

Slide 28

Slide 28 text

3-1-4. ENUM Ϛονϯά

Slide 29

Slide 29 text

ςΩετ ENUMʁ ▸ SwiftͰ࢖ΘΕΔσʔλߏ଄ͷҰͭ ▸ ෳ਺ͷ஋Λάϧʔϐϯά͓ͯ͘͜͠ͱ͕Ͱ͖Δܕ ▸ ೔ຊޠͰ͸ྻڍܕͱ͍͏ ▸ จ๏͸ enum <ྻڍ໊> { case <ྻڍࢠ1>, case <ྻڍࢠ2>, … } ▸ Swiftͷྻڍܕ΋ଞͷݴޠʹൺ΂Δͱศར ▸ Optionalܕ΋࣮͸Ϋϥε͡Όͳͯ͘enumͰ͢ ▸ ৄ͘͠͸ޙ΄Ͳษڧ͠·͢

Slide 30

Slide 30 text

ςΩετ ENUMϚονϯά ▸ ઌ΄Ͳઆ໌ͨ͠enumΛར༻ͯ͠Ϛονϯάͤ͞Δ͜ͱ΋Մೳ ▸ enumͷཁૉΛࢦఆͯ͠Ϛονϯάͤ͞Δ ▸ ཁૉΛࢦఆ͢Δࡍʹ͸ .(υοτ)͔Β࢝ΊΔ ▸ ΤϥʔॲཧΛenumͰॻ͘͜ͱ͕ଟ͍ ▸ SwiftͷEnum΋ඇৗʹศར ▸ ௕͘ͳΔͷͰ࣍ʹଓ͖·͢

Slide 31

Slide 31 text

ENUMϚονϯά enum NetworkError { case authError case unexpectedData case unknownError case nilResponse } switch error { case .authError: print("ೝূʹࣦഊ͠·ͨ͠") case .unexpectedData: print("ෆਖ਼ͳσʔλͰ͢") case .unknownError: print("Α͘Θ͔Γ·ͤΜ͕ΤϥʔͰ͢(^q^)") case .nilResponse: print("Ϩεϙϯε͕ۭͬΆͰ͢") case .timeout: print("αʔόʔ͔ΒԠ౴͕͋Γ·ͤΜ") }

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

΋͏Ұ౓ enum NetworkError { case authError case unexpectedData case unknownError case nilResponse } switch error { case .authError: print("ೝূʹࣦഊ͠·ͨ͠") case .unexpectedData: print("ෆਖ਼ͳσʔλͰ͢") case .unknownError: print("Α͘Θ͔Γ·ͤΜ͕ΤϥʔͰ͢(^q^)") case .nilResponse: print("Ϩεϙϯε͕ۭͬΆͰ͢") case .timeout: print("αʔόʔ͔ΒԠ౴͕͋Γ·ͤΜ") }

Slide 34

Slide 34 text

΋͏Ұ౓ enum NetworkError { case authError case unexpectedData case unknownError case nilResponse } switch error { case .authError: print("ೝূʹࣦഊ͠·ͨ͠") case .unexpectedData: print("ෆਖ਼ͳσʔλͰ͢") case .unknownError: print("Α͘Θ͔Γ·ͤΜ͕ΤϥʔͰ͢(^q^)") case .nilResponse: print("Ϩεϙϯε͕ۭͬΆͰ͢") case .timeout: print("αʔόʔ͔ΒԠ౴͕͋Γ·ͤΜ") } default͕ͳ͍ʂ

Slide 35

Slide 35 text

DEFAULT͕ͳ͍ʂ(ೋ౓໨)

Slide 36

Slide 36 text

ςΩετ DEFAULT͕ 3: ▸ enumϚονϯάͷ৔߹͸default͸ॻ͔ͳͯ͘΋ྑ͍(৔߹ ͕͋Δ) ▸ enumͷཁૉશͯΛࢦఆ͍ͯ͠Δ৔߹͸লུՄೳ ▸ enumͷ৔߹ඞͣࢦఆ͞Εͨ஋͔͜͠ͳ͍͜ͱ͕อূ͞ΕΔ ͷͰdefault͸͍Βͳ͍

Slide 37

Slide 37 text

3-1-5. OPTIONAL Ϛονϯά

Slide 38

Slide 38 text

ςΩετ OPTIONALϚονϯά ▸ Optionalܕ(?ܕ)Λ࢖༻ͯ͠Ϛονϯάͤ͞Δ ▸ ܗ͸enumʹࣅ͍ͯΔ ▸ ཁૉ͸ some(value) ͔ none ͷΈ ▸ ஋͕͋ͬͨͱ͖ɺແ͔ͬͨͱ͖Ͱ໌֬ʹॲཧΛ෼͚͍ͨ৔߹͸if-letΑΓ΋ͪ͜ΒΛਪ঑ let brain: Brain? = nil switch brain { case .some(let brain): print("ਖ਼ৗͰ͢") case .none: print("಄ۭͬΆʂ") }

Slide 39

Slide 39 text

3-1-5. TYPE-CAST Ϛονϯά

Slide 40

Slide 40 text

ςΩετ TYPE-CASTϚονϯά ▸ ܕม׵Λ࢖͏΋͘͠͸ಛఆͷܕΛࢦఆͯ͠Ϛονϯάͤ͞Δ΍Γํ ▸ ܕม׵Λ࢖͏ࡍ͸ “as", ܕΛࢦఆ͍ͨ͠৔߹͸ “is” Λ࢖͏ ▸ Ͱ͖Ε͹ܕม׵Λߦ͏ίʔυ͕ͳ͍ͷ͕ཧ૝Ͱ͸͋ΔͷͰ࢖͏͜ͱ͸ গͳ͍(͔΋?) let nyantyu: Animal = Cat(name: "nantyu") switch nyantyu { case let a as Cat: print("ೣͰͨ͠(?)") a.burk() case is Dog: print("ݘͰ͢") default: print("ಈ෺Ͱ͸͋Γ·ͤΜ") }

Slide 41

Slide 41 text

3-2. SWITCHͷΦʔόʔ ϩʔυʹ͍ͭͯ

Slide 42

Slide 42 text

ςΩετ SWITCHͷΦʔόʔϩʔυʁ ▸ case <৚݅ࣜ>: ▸ ↑ͷ෦෼͸ڍಈΛॻ͖׵͑Δ͜ͱ͕Մೳʂ ▸ ରԠ͢Δԋࢉࢠ͸ =~ ▸ ࣗ෼Ͱ࡞ͬͨΫϥεΛ޷͖ͳΑ͏ʹϚονϯάͤ͞Δ͜ͱ ͕Ͱ͖ΔΑ͏ʹͳΔ