Slide 1

Slide 1 text

ϓϩτίϧࢦ޲ϑϨϯζ - Class to Struct - @satoshin21

Slide 2

Slide 2 text

satoshin21 SatoshiN21 ௕ࡔ ޛࢤ (Nagasaka Satoshi) - iOS Engineer of pairs Div. eureka, Inc. - Swift, Objective-C, Java(Android), Apple Script

Slide 3

Slide 3 text

- Pairs - Couples - We are hiring!!

Slide 4

Slide 4 text

Objecive-C͔ΒSwift΁

Slide 5

Slide 5 text

ΦϒδΣΫτࢦ޲(OOP)͔Β ϓϩτίϧࢦ޲(POP)΁

Slide 6

Slide 6 text

ϓϩτίϧࢦ޲ͬͯʁ

Slide 7

Slide 7 text

protocolΛ࢖͑͹ ϓϩτίϧࢦ޲Ͱ͢

Slide 8

Slide 8 text

ͦΜͳ;͏ʹߟ͍͑ͯͨ࣌ظ͕ ๻ʹ΋͋Γ·ͨ͠

Slide 9

Slide 9 text

POPͱOOP͕ܾఆతʹҧ͏ॴ͸

Slide 10

Slide 10 text

ClassΛ࢖͏͔ʁ StructΛ࢖͏͔ʁ

Slide 11

Slide 11 text

ͱߟ͑Δํ͕͍ۙ

Slide 12

Slide 12 text

΋͘͠͸

Slide 13

Slide 13 text

ΦϒδΣΫτࢦ޲(Class)ͷऑ఺Λ

Slide 14

Slide 14 text

StructͱProtocolͰղܾ͢Δ ύϥμΠϜ

Slide 15

Slide 15 text

ͦΕ͕ϓϩτίϧࢦ޲

Slide 16

Slide 16 text

ΦϒδΣΫτࢦ޲ͱ͸ʁ

Slide 17

Slide 17 text

ΦϒδΣΫτࢦ޲ ‣ &ODBQTVMBUJPO ΧϓηϧԽ ‣ "DDFTT$POUSPM Մࢹੑ੍ޚ ‣ "CTUSBDUJPO ந৅Խ ‣ /BNFTQBDF ໊લۭؒ ‣ &YQSFTTJWF4ZOUBY දݱྗͷ͋Δߏจɻϝιου΍ϓϩύςΟΛ ܨ͛ͯॻ͚ͨΓͳͲ ‣ &YUFOTJCJMJUZ ֦ுੑ

Slide 18

Slide 18 text

ΦϒδΣΫτࢦ޲ ‣ &ODBQTVMBUJPO ΧϓηϧԽ ‣ "DDFTT$POUSPM Մࢹੑ੍ޚ ‣ "CTUSBDUJPO ந৅Խ ‣ /BNFTQBDF ໊લۭؒ ‣ &YQSFTTJWF4ZOUBY දݱྗͷ͋Δߏจɻϝιου΍ϓϩύςΟΛ ܨ͛ͯॻ͚ͨΓͳͲ ‣ &YUFOTJCJMJUZ ֦ுੑ ͜ΕΒ͸ܕ(Type)ͷಛ௃

Slide 19

Slide 19 text

ΦϒδΣΫτࢦ޲ͷऑ఺

Slide 20

Slide 20 text

ΦϒδΣΫτࢦ޲ͷऑ఺ ‣ ҉໧తͳΦϒδΣΫτͷڞ༗ w ࢀর͍ͯ͠ΔΦϒδΣΫτ͕ଞͷΦϒδΣΫτͱڞ༗ w ʮࢀর͍ͯ͠ΔΦϒδΣΫτ͕উखʹҧ͏΋ͷʹͳͬͨΑʂͳʹ ͜Εͳʹ͜Εʂʯ

Slide 21

Slide 21 text

ΦϒδΣΫτࢦ޲ͷऑ఺ ‣ ܧঝؔ܎Λ೺Ѳ͢Δͷ͕େม w ͜ͷ6TFS%FUBJM7JFX$POUSPMMFS͸%FUBJM7JFX$POUSPMMFSΛܧঝ ͍ͯͯ͠͞ΒʹͦͷεʔύʔΫϥεʹ͸#BTF7JFX$POUSPMMFS͕ w εʔύʔΫϥε͕ͲͷΑ͏ͳڍಈΛ͢Δͷ͔ɺͲͷΑ͏ͳΦϒδΣ ΫτΛอ͍࣋ͯ͠Δͷ͔Λ೺Ѳ͠ͳ͚Ε͹ͳΒͳ͍ w ʮ͜ͷεʔύʔΫϥεͷ஋Λमਖ਼ͨ͠Βಈ͔ͳ͘ͳͬͨΑʔʂ ͢͝ʔ͍ʂʯ

Slide 22

Slide 22 text

ͳͲ

Slide 23

Slide 23 text

ͦ͜Ͱొ৔͢Δͷ͕ ϓϩτίϧࢦ޲

Slide 24

Slide 24 text

ϓϩτίϧࢦ޲Ͱ͸جຊతʹ Class͸࢖Θͳ͍

Slide 25

Slide 25 text

StructͱProtocolͷΈ

Slide 26

Slide 26 text

Class to Struct

Slide 27

Slide 27 text

ClassͱStruct $MBTT 4USVDU ܕ 5ZQF ࢀরܕ ஋ܕ ܧঝ Ͱ͖Δ Ͱ͖ͳ͍ ϓϩύςΟมߋ Մೳ جຊతʹෆՄೳ

Slide 28

Slide 28 text

class DataStore { var strings = [String]() func add(string: String) { strings.append(string) } } ClassΛ༻͍ͨ৔߹

Slide 29

Slide 29 text

let dataStore = DataStore() dataStore.add(string: "Foo") dataStore.add(string: "Bar") let classA = ReferenceClassA(dataStore: dataStore) classA.add(string: "hoge") let stringA = classA.dataStoreString() // -> [“Foo","Bar","hoge"] ClassΛ༻͍ͨ৔߹

Slide 30

Slide 30 text

let dataStore = DataStore() dataStore.add(string: "Foo") dataStore.add(string: “Bar") let classA = ReferenceClassA(dataStore: dataStore) classA.add(string: "hoge") let stringA = classA.dataStoreString() // -> ["Foo","Bar","hoge"] let classB = ReferenceClassB(dataStore: dataStore) classB.dataStore.strings.removeAll() let stringAre = classA.dataStoreString() // -> [] ClassΛ༻͍ͨ৔߹

Slide 31

Slide 31 text

Structͷ৔߹

Slide 32

Slide 32 text

struct DataStore { var strings = [String]() mutating func add(string: String) { strings.append(string) } } StructΛ༻͍ͨ৔߹

Slide 33

Slide 33 text

var dataStore = DataStore() dataStore.add(string: "Foo") dataStore.add(string: "Bar") var structA = ReferenceStructA(dataStore: dataStore) structA.dataStore.add(string: "hoge") let stringA = structA.dataStoreString() // -> [“Foo","Bar","hoge"] StructΛ༻͍ͨ৔߹

Slide 34

Slide 34 text

var dataStore = DataStore() dataStore.add(string: "Foo") dataStore.add(string: "Bar") var structA = ReferenceStructA(dataStore: dataStore) structA.dataStore.add(string: "hoge") let stringA = structA.dataStoreString() // -> ["Foo","Bar","hoge"] var structB = ReferenceStructB(dataStore: dataStore) structB.dataStore.strings.removeAll() let stringAre = structA.dataStoreString() // -> ["Foo","Bar","hoge"] StructΛ༻͍ͨ৔߹

Slide 35

Slide 35 text

ࢀরઌ͕มԽ͢Δ͜ͱΛ ؾʹ͠ͳͯ͘ྑ͍

Slide 36

Slide 36 text

ͨͩɺStruct͸ܧঝ͕࢖͑ͳ͍

Slide 37

Slide 37 text

is-aؔ܎ͱ͔ಉ͡;Δ·͍ఆٛ ͢Δͱ͖ͱ͔Ͳ͏͢Μͷʁ

Slide 38

Slide 38 text

ͦ͜ͰProtocol

Slide 39

Slide 39 text

ΦϒδΣΫτࢦ޲ʹΑΔܧঝؔ܎ "OZ0CKFDU &NQMPZFF %FWFMPQFS %JSFDUPS J04%FWFMPQFS ʜ

Slide 40

Slide 40 text

ϓϩτίϧࢦ޲ )BT1SPHSBNNJOH4LJMM %JSFDUPS J04%FWFMPQFS "OESPJE%FWFMPQFS )BT.BOBHFNFOU4LJMM

Slide 41

Slide 41 text

ϓϩτίϧࢦ޲ͷར఺ ‣ ґଘؔ܎ΛϑϥοτʹͰ͖Δ ‣ ؔ܎ੑ΋௥͍΍͍͢ ‣ 1SPUPDPM&YUFOTJPOʹΑΓɺΦϒδΣΫτࢦ޲ͷܧঝͰ࣮ݱ͖ͯ͠ ͨίʔυͷ࠶ར༻ੑ΋อͯΔ

Slide 42

Slide 42 text

Swift Standart LibraryͰ͸ɺ طʹclass͸1ͭΛ࢒͢ͷΈ

Slide 43

Slide 43 text

͜ΕͰ໌೔͔Β ϓϩτίϧࢦ޲ϑϨϯζͩͶʔʂ

Slide 44

Slide 44 text

͙͢ʹ͸೉ͦ͠͏

Slide 45

Slide 45 text

ϓϩτίϧࢦ޲ͷ໰୊఺ ‣ ΦʔϓϯιʔεԽ͞Εͯ͸͍Δ͕ɺະͩ4XJGU͸J04 ͳ͍͠͸ NBD04ΞϓϦ։ൃݴޠͷΠϝʔδ͕ڧ͍ ‣ ͭ·Γɺ$PDPB'SBNFXPSLͱ஥ྑ͘͠ͳ͚Ε͹ͳΒͳ͍ ‣ $PDPB'SBNFXPSL͸DMBTTϕʔε ‣ ΦϒδΣΫτࢦ޲ͱ൱͕ԠͰ΋෇͖߹͏ඞཁ͕͋Δ ‣ ͦΕ͸ɺΦϒδΣΫτࢦ޲ͷةݥੑ ҉໧తΦϒδΣΫτڞ༗ Λ͸ ΒΜͰ͍Δͱ͍͏͜ͱ

Slide 46

Slide 46 text

·ͨɺແཧʹ classͱstructΛڞଘͤ͞Δͱɾɾ

Slide 47

Slide 47 text

ClassͱStruct $MBTT 4USVDU ܕ 5ZQF ࢀরܕ ஋ܕ ܧঝ Ͱ͖Δ Ͱ͖ͳ͍ ϓϩύςΟมߋ Մೳ جຊతʹෆՄೳ

Slide 48

Slide 48 text

ClassͱStruct $MBTT 4USVDU ܕ 5ZQF ࢀরܕ ஋ܕ ܧঝ Ͱ͖Δ Ͱ͖ͳ͍ ϓϩύςΟมߋ Մೳ جຊతʹෆՄೳ ͜ͷҧ͍Λৗʹҙࣝ͢Δඞཁ͕͋Δ

Slide 49

Slide 49 text

·ͩզʑ͸ ΦϒδΣΫτࢦ޲͔Β཭ΕΒΕͳ͍

Slide 50

Slide 50 text

Swift͸ϚϧνύϥμΠϜͳͷͰ ͏·͘ڞଘ͍ͤͯ͘͞ࣄ͕ॏཁ

Slide 51

Slide 51 text

΁ʔ͖΁ʔ͖ʂ

Slide 52

Slide 52 text

ύϥμΠϜʹΑͬͯ ͱ͍͘ͳ͜ͱҧ͏͔Βʂ

Slide 53

Slide 53 text

֤ύϥμΠϜͷಛੑΛཧղͯ͠ ॊೈͳϓϩάϥϛϯάΛ

Slide 54

Slide 54 text

Thank you IUUQTXXXOBTBHPWNJTTJPO@QBHFT/11OFXTFBSUIBUOJHIUIUNM