Swift クラスのイニシャライザー #devsap

193 Views

May 25, 19

スライド概要

Swift のイニシャライザーについて、その基本的なところを特にクラス焦点を絞って紹介してみます。クラスに用意されている3つのイニシャライザーの特徴、それらの役割、それを連携したり、隠蔽される場面とか、いろんな観点から整理していってみます。

※ Docswell での公開に移行する直前の Slideshare での閲覧数は 408 でした。

profile-image

正統派趣味人プログラマー。プログラミングとは幼馴染です。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

4XJGU ΫϥεͷΠχγϟϥΠβʔ ‫۽‬୩༑޺ !FT@LVNBHBJ J1IPOF%FW4BQQPSPษ‫ڧ‬ձ.BZ  4XJGUWFSTJPO

2.

‫۽‬୩༑޺ 5PNPIJSP,VNBHBJ ⾣ ΈΜͳͰָ͠Ήษ‫ڧ‬ձ͕޷͖ɻ ⾣ ϓϩάϥϛϯάͷָ͠͞Λ఻͍͖͍͑ͯͨɻ w ωοτϥδΦ w ษ‫ڧ‬ձͷ஍ํ։࠵ w ಉਓࢽଈചձ

3.

‫گۙ‬

4.

ษ‫ڧ‬ձͷָͬͯ͠͞ɺͳΜ͚ͩͬʁ

5.

 ͖͔͚ͬ͸ɺ௒ٕज़ॻయ χίχί௒ձٞͰ։࠵͞Εٕͨज़ॻయ ٕज़͚ͩ͡Όͳ͍lਓz͕ߦ͖ަ͏ɺจԽͷަࠩ఺ ࣗ෼্࢙ɺ࠷ߴͷٕज़ॻయ

6.

ҎདྷɺԠԉத ͘͞ΒγϯσϨϥ χίχί௒ձٞ ௒ՎͬͯΈͨͰ८Γ⁊ͬͨΞΠυϧάϧʔϓ ৽॓ͱळ༿‫Ͱݪ‬೔ϥΠϒ‫׆‬ಈͬͯʜ͍͢͝ ൴ঁͨͪͷඳ͘ੈքʹɺ ϓϩάϥϛϯάษ‫ڧ‬ձͷlཧ૝z͕ॏͳͬͯ‫͡ײ‬Δ

7.

d J04$PO  JO-POEPO ⾣ -POEPOͰ։࠵͞ΕΔ J04ͷ ஍ํΧϯϑΝϨϯε ⾣ ϓϩάϥϛϯάʹ·͙ͬ͢ͳҹ৅ ⾣ ೔ؒͷே͔Β༦·Ͱ w w w τϥοΫͷฏߦల։ ֤ηογϣϯ͸ʙ෼ ηογϣϯຖʹ ෼Ҏ্ͷ$P⒎FF#SFBLλΠϜ ͔ͭͯͷɺษ‫ڧ‬ձΒ͠͞Λ‫͡ײ‬Δ৔ॴ

8.

‫׆‬ಈ ओʹҎ߱

9.

NPPLNPPLSBEJP NPPL ‫۽‬୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ಺͔Β ௌ͑ͯ͘͜Δ੠ʹࣖΛ܏ָ͚ͯ͠ΉϥδΦ ຖ݄ୈ̎ɾୈ̐ ݄༵೔ ʹ഑৴ IUUQLFQDNPPLNPPLSBEJPDPN ⾣ ୈ࿩  4XJGU4ZOUBY ⾣ ୈ࿩  ٕज़ॻయ̒ɺٕͦͯ͠ज़ಉਓࢽ ⾣ ୈ࿩  Ϧʔμϒϧίʔυɺ͜ΕͲ͏͍͏͜ͱʁ ⾣ ୈ࿩  ৽ࣾձਓ͞Μʹಧ͚͍ͨɺय़ͷϙουΩϟετ·ͭΓɻ ⾣ ୈ࿩  "QQMF$BS1MBZ ⾣ ୈ࿩  4UBUJDͱ4JOHMFUPO ⾣ ୈ࿩  ϓϩάϥϛϯά͢Δͱ͖ɺԿߟ͑ͯΔʁ ⾣ ୈ࿩  θϩ͔Β࢝·ΔΠϯσοΫε

10.

։࠵‫݄ؒظ‬೔ ʙ݄೔ IUUQTQPEDBTUGFTUJWBMpSFCBTFBQQDPN ‫۽‬୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ಺͔Β ௌ͑ͯ͘͜Δ੠ʹࣖΛ܏ָ͚ͯ͠ΉϥδΦ΋ࢀՃ

11.

ΈΜͳͰ 4XJGU ෮शձ(0 ʜΈΜͳͰ4XJGU෮शձ(0JOࡳຈr  TU⒌ ʜΈΜͳͰ4XJGU෮शձ(0JOԭೄr  OE⒌ 4XJGU%BZ  ʜΈΜͳͰ4XJGU෮शձ(0JOઋ୆r  SE⒌ ʜΈΜͳͰ4XJGU෮शձ(0JO෱Ԭr  UI⒌ 4XJGU%BZ  ʜΈΜͳͰ4XJGU෮शձ(0JO෱Ԭr  UI⒌ ʜΈΜͳͰ4XJGU෮शձ(0JO‫౎ژ‬r  UI⒌ ʜΈΜͳͰ4XJGU෮शձ(0JO௕໺r  UI⒌ XJUI/4&( ʜΈΜͳͰ4XJGU෮शձ(0JO෱Ԭr  UI⒌ ʜΈΜͳͰ4XJGU෮शձ(0JO‫ؠ‬खr  UI⒌ 4XJGU%BZ  ʜΈΜͳͰ4XJGU෮शձ(0JOࡳຈr UI⒌ NJOJ ʜΈΜͳͰ4XJGU෮शձ(0JO෱Ԭr TU⒌ தࢭ

12.

ٕज़‫ܥ‬ಉਓࢽ ࣗඅग़൛ͱಉਓࢽଈചձ

13.

΋͘΋ࣥ͘චձ ʙٕज़‫ܥ‬ಉਓࢽʗ঎‫ࢽۀ‬ɾൃදࢿྉɾϒϩάʙ IUUQTUFDICPPLNFFUVQDPOOQBTTDPN ⾣ ̎प೥‫ه‬೦ϐΫχοΫˏઍ༿ɾນுւ඿ެԂ ⾣ ˑग़ு൛3&7!ਆాਆอொ ⾣ ˑग़ு൛3&7!౦‫ాוژ‬

14.

ٕज़ॻಉਓࢽതཡձ େా۠࢈‫ۀ‬ϓϥβ1J0

15.

ίϛοΫϚʔέοτʢͷநબ଴ͪʣ ʙ  !౦‫ژ‬ϏοάαΠτ ͷநબ଴ͪ

16.

৽‫ץ‬ !ٕज़ॻయ̒

17.

!ٕज़ॻయ̒ 4XJGU ΠχγϟϥΠβʔେશ 4XJGUͷΠχγϟϥΠβʔͷ‫ج‬ຊ͔Βɺ֤‫ʹܕ‬ΈΒ ΕΔಛ௃ͷҧ͍ɺԿ‫Ͱ͚ͩ͏࢖͘ͳؾ‬͸‫ݟ‬མͱ͠ ͕ͪͳཹҙ఺ͳͲΛղઆͨ͠ೖ໳ॻͰ͢ɻ ࢓༷ ⾣ ੡ຊ൛ɺిࢠ൛ ⾣ " ⾣ ϖʔδ #005)Ͱग़඼த

18.

ࠓճͷςʔϚ ΫϥεͷΠχγϟϥΠβʔ

19.

ΠχγϟϥΠβʔͱ͸ʁ ‫ܕ‬ͷΠϯελϯεΛੜ੒͢Δ΋ͷ ͱࢥ͓͚ͬͯ͹ྑͦ͞͏

20.

ίϯετϥΫλʔ

21.

$POTUSVDUPS ΦϒδΣΫτੜ੒ͷ‫ݪ‬ଇ  ϝϞϦʔׂΓ౰ͯ "MMPDBUJPO   ॳ‫ظ‬Խ *OJUJBMJ[BUJPO

22.

$POTUSVDUPS 0CKFDUJWF$ NSObject *obj = [[NSObject alloc] init];

23.

$POTUSVDUPS $‫ޠݴ‬ void* p = malloc(size); memcpy(p, src, size);

24.

$POTUSVDUPS $ ‫ޠݴ‬ CObject *object = new CObject();

25.

$POTUSVDUPS $ ‫ޠݴ‬ CObject object = CObject();

26.

$POTUSVDUPS 4XJGU‫ޠݴ‬ let object = Object();

27.

$POTUSVDUPS 4XJGUͰͷΦϒδΣΫτੜ੒  ϝϞϦʔׂΓ౰ͯ "MMPDBUJPO  4XJGU͕ɺඞཁͳϝϞϦʔྖҬΛׂΓ౰ͯΔ  ॳ‫ظ‬Խ *OJUJBMJ[BUJPO ϓϩάϥϚʔ͕ɺద੾ʹϝϞϦʔྖҬΛॳ‫ظ‬Խ͢Δ ׂΓ౰ͯΒΕͨྖҬ͸selfΛ௨ͯ͠ࢀর͢Δ

28.

4XJGUͷ"MMPDBUJPO ੑ࣭ʹԠͨ͡ϝϞϦʔͷׂΓ౰ͯ " ஋‫ܕ‬͸ɺඞཁྖҬΛselfʹׂΓ౰ͯΔɻ self TFMGࣗମΛɺಡΈॻ͖͢Δ # ࢀর‫ܕ‬͸ɺඞཁྖҬΛͲ͔͜ʹׂΓ౰ͯɺ ׂΓ౰ͯͨ৔ॴΛselfͰࣔ͢ɻ self TFMGࣗମ͸ɺॻ͖ࠐΈෆՄ ࢀরઌΛಡΈॻ͖͢Δ

29.

4XJGUͷ*OJUJBMJ[BUJPO ΠχγϟϥΠβʔͷ໾ׂ͸ʁ ׂΓ౰ͯΒΕͨϝϞϦʔྖҬΛ ࣮֬ʹॳ‫ظ‬Խ͢Δ͜ͱ

30.

Ϋϥε‫ܕ‬ͷΠχγϟϥΠβʔ  ׂΓ౰ͯΒΕͨྖҬΛ࣮֬ʹॳ‫ظ‬Խ͢Δ  ‫ܧ‬ঝ࣌ʹ΋࣮֬ʹॳ‫ظ‬Խ͢ΔͨΊͷ࢓૊Έ  ࢦఆΠχγϟϥΠβʔ %FTJHOBUFE*OJUJBMJ[FS  ศٓΠχγϟϥΠβʔ $POWFOJFODF*OJUJBMJ[FS  ඞਢΠχγϟϥΠβʔ 3FRVJSFE*OJUJBMJ[FS

31.

ఆٛͷ‫ج‬ຊ ࢦఆΠχγϟϥΠβʔ ඞਢΠχγϟϥΠβʔ init(…) required init(…) ศٓΠχγϟϥΠβʔ convenience init(…) required convenience init(…)

32.

%FTJHOBUFE*OJUJBMJ[FS ࢦఆΠχγϟϥΠβʔ ໾ׂ ׂΓ౰ͯΒΕͨྖҬΛ࣮֬ʹॳ‫ظ‬Խ͢Δ੹຿Λෛ͏ ࣮૷࣌ͷ໿ଋ͝ͱ  ͻͱͭҎ্ɺඞͣఆٛ͢Δ͜ͱʢ‫ط‬ఆΠχγϟϥΠβʔͰ΋Մʣ  ಺෦ͰɺશͯͷϓϩύςΟʔΛॳ‫ظ‬Խ͢Δ͜ͱ  ‫ܧ‬ঝ࣌͸ɺॳ‫ظ‬Խ‫ʹޙ‬ඞͣ਌ͷΠχγϟϥΠβʔΛ‫ͼݺ‬ग़͢͜ͱ

33.

$POWFOJFODF*OJUJBMJ[FS ศٓΠχγϟϥΠβʔ ໾ׂ Ҿ਺Λॲཧͯ͠ɺࢦఆΠχγϟϥΠβʔʹҾ͖‫੹͙ܧ‬຿Λෛ͏ ࣮૷࣌ͷ໿ଋ͝ͱ  ಺෦Ͱɺࣗ਎ͷΠχγϟϥΠβʔΛ‫ͼݺ‬ग़͢͜ͱ  ϓϩύςΟʔͷॳ‫ظ‬Խ͸ࢦఆΠχγϟϥΠβʔʹҕͶΔ  ॳ‫ظ‬Խ‫ʹޙ‬ϓϩύςΟʔΛհͯ͠ͷมߋ͸Մೳ  ‫ܧ‬ঝ࣌΋ɺඞͣࣗ਎ͷΠχγϟϥΠβʔΛ‫ͼݺ‬ग़͢͜ͱ

34.

3FRVJSFE*OJUJBMJ[FS ඞਢΠχγϟϥΠβʔ ໾ׂ ͜ͷΠχγϟϥΠβʔ͕কདྷʹ౉ͬͯଘࡏ͢Δ͜ͱΛอূ͢Δ ࢦఆΠχγϟϥΠβʔʹ΋ศٓΠχγϟϥΠβʔʹ΋࢖༻Մೳ ࣮૷࣌ͷ໿ଋ͝ͱ  ‫ج‬ຊతͳ໿ଋ͝ͱ͸ɺ‫ݩ‬ͷΠχγϟϥΠβʔͱಉ͡  ‫ܧ‬ঝ࣌ͰӅṭ͞ΕΔ৔߹͸ɺඞͣ࠶ఆ͕ٛඞཁ

35.

ΠχγϟϥΠβʔͷӅṭ

36.

Ϋϥε‫ܧ‬ঝ࣌ʹ͓͚Δ ΠχγϟϥΠβʔͷӅṭ  ਌ͷΠχγϟϥΠβʔ͕Ӆṭ͞ΕΔ͜ͱ͕͋Δ  Ӆṭ͞ΕΔͷ͸ɺ ‫ܧ‬ঝઌͰࢦఆΠχγϟϥΠβʔΛ௥Ճͨ͠ͱ͖

37.

ΠχγϟϥΠβʔͷӅṭ ͳͥɺӅṭ͞ΕΔʁ ׂΓ౰ͯΒΕͨϝϞϦʔྖҬΛ ࣮֬ʹॳ‫ظ‬Խ͢ΔͨΊ

38.

Ӆṭ͞ΕΔཧ༝ ‫ܧ‬ঝઌͷࢦఆΠχγϟϥΠβʔ͕‫ݺ‬͹Εͳ͍ࣄଶΛ๷͙ͨΊ ⾣ ਌Ϋϥε͸ɺ‫ܧ‬ঝઌͷॳ‫ظ‬ԽΛ૝ఆ͍ͯ͠ͳ͍ ⾣ ࣮֬ͳॳ‫ظ‬ԽΛߦ͏ͨΊʹɺ ‫ܧ‬ঝઌͷࢦఆΠχγϟϥΠβʔΛ࣮֬ʹ‫ݺ‬͹ͤΔඞཁ͕͋Δ  ਌ΫϥεͷΠχγϟϥΠβʔΛӅṭ͢Δ͜ͱͰ࣮‫͢ݱ‬Δ

39.

Ӆṭ͞ΕΔཧ༝ ‫ܧ‬ঝઌͷࢦఆΠχγϟϥΠβʔ͕‫ݺ‬͹Εͳ͍ࣄଶΛ๷͙ͨΊ ‫ܧ‬ঝઌΛਖ਼֬ʹ ॳ‫ظ‬Խ͢Δಓ͚ͩʹ͢Δ ೿ੜΫϥε TFMG ‫ج‬ఈΫϥε TVQFS ‫ܧ‬ঝઌͷJOJU͚͕ͩ ‫ݺ‬͹ΕΔՄೳੑΛະવʹ๷͙ init B convenience init A init Ӆṭ Ӆṭ

40.

Ӆṭ͞Εͳ͍͜ͱ΋͋Δ

41.

Ӆṭ͞Εͳ͍৔໘ ‫ܧ‬ঝઌͰΠχγϟϥΠβʔΛఆٛ͠ͳ͍ͱ͖ ਌ͷΠχγϟϥΠβʔͰ ࣮֬ʹॳ‫ظ‬ԽՄೳ ೿ੜΫϥε TFMG ‫ج‬ఈΫϥε TVQFS ‫ܧ‬ঝઌͰͷಛผͳ ॳ‫ظ‬Խॲཧ͕ඞཁͳ͍৔߹ init A convenience init B

42.

Ӆṭ͞Εͳ͍৔໘ ‫ܧ‬ঝઌͰศٓΠχγϟϥΠβʔ͚ͩΛఆٛ͢Δͱ͖ ਌ͷΠχγϟϥΠβʔͰ ࣮֬ʹॳ‫ظ‬ԽՄೳ ‫ܧ‬ঝઌͰͷಛผͳ ॳ‫ظ‬Խॲཧ͸ଘࡏ͠ͳ͍ ೿ੜΫϥε convenience TFMG init C ‫ج‬ఈΫϥε TVQFS init A convenience init B

43.

Ӆṭ͞Εͳ͍৔໘ ‫ܧ‬ঝઌͰશͯͷࢦఆΠχγϟϥΠβʔΛ࠶ఆٛͨ͠ͱ͖ ‫ܧ‬ঝઌͷࢦఆΠχγϟϥΠβʔʹඞͣḷΓண͚Δ ೿ੜΫϥε convenience TFMG init C ‫ج‬ఈΫϥε TVQFS init C override init A init A init D convenience init B

44.

ΫϥεͷΠχγϟϥΠβʔ ·ͱΊ  Ϋϥεʹ͓͚ΔΠχγϟϥΠβʔͷಛ௃  ࢦఆΠχγϟϥΠβʔ  ศٓΠχγϟϥΠβʔ  ඞਢΠχγϟϥΠβʔ  ‫ܧ‬ঝઌͰΠχγϟϥΠβʔΛ࣮૷͢Δͱɺ ਌ͷΠχγϟϥΠβʔ͕Ӆṭ͞ΕΔ৔߹͕͋Δ  Ӆṭ͞Εͳ͍৔߹  ‫ܧ‬ঝઌͰΠχγϟϥΠβʔΛఆٛ͠ͳ͍ͱ͖  ‫ܧ‬ঝઌͰศٓΠχγϟϥΠβʔ͚ͩΛఆٛ͢Δͱ͖  ‫ܧ‬ঝઌͰɺ਌ͷશͯͷࢦఆΠχγϟϥΠβʔΛఆٛ͢Δͱ͖

45.

&OKPZ1SPHSBNNJOH 5IBOLZPV ‫۽‬୩༑޺ !FT@LVNBHBJ