Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap

>100 Views

July 24, 16

スライド概要

Swift 3.0 の新機能に関して、新機能の追加と変更まわりを記した資料です。削除された機能や Objective-C 寄りの機能には触れていません。カジュアル Swift 勉強会での話を少しスリムにしつつ、調べきれなかった事柄を追加してあります。

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

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

4XJGU ͷ৽‫ػ‬ೳ ௥Ճɾมߋ·ΘΓ͚ͩɺͬ͘͟Γ঺հ /*    J1IPOF%FW4BQQPSPษ‫ڧ‬ձ+VM  */ &;/&5‫۽‬୩༑޺ 4XJGU%FWFMPQFS1SFWJFX 9DPEFCFUB IUUQF[OFUKQ

2.

‫۽‬୩༑޺ /* @es_kumagai */ 5PNPIJSP,VNBHBJ /** */ ⾣ 4XJGU‫͕ޠݴ‬௒େ޷͖Ͱ͢ʂ ⾣ ΈΜͳͰָ͠Ήษ‫ڧ‬ձ͕େ޷͖Ͱ͢ʂ ⾣ ษ‫ڧ‬ձͰൃද͢Δͷ͕ͱͬͯ΋޷͖Ͱ͢ʂ ⾣ ॻ੶9DPEFపఈղઆॻ͖·ͨ͠ɻ ⾣ ٕज़ϒϩά&;/&5Λॻ͍ͨΓͯ͠·͢ɻ

3.

ษ‫ڧ‬ձΛ։࠵ͯ͠·͢ɻ ԣ඿J1IPOF։ൃऀษ‫ڧ‬ձ ΧδϡΞϧ4XJGUษ‫ڧ‬ձ ZJEFW ˏԣ඿ɾഅंಓ DTXJGU !ԣ඿ɾ੨༿୆ Θ͍Θ͍ɾΏΔ͘ɺJ1IPOF։ൃऀͷ ΈΜͳͰָ͘͠ա͢͝ͷ͕໨తͷձ ΏΔ͘ΈΜͳͰ4XJGU‫͍ͯͭʹޠݴ‬ ‫ޠ‬Β͑Δ৔͕ཉͯ࢝͘͠Ίͨձ ୈճ͸݄‫ޙ‬൒ʹ։࠵͔΋͠Εͳ͍ ୈ̍̌ճΛ݄೔ʹ։࠵༧ఆ /** ‫͍ئ‬ J04΍4XJGUͷษ‫ڧ‬ձΛ։࠵ͯ͠·͢ɻ ҆৺ͯ͠ஊٛʹՖΛ࡙͔ͤΒΕ·͢Α͏ʹɻ */

4.

$PEF1JFDFGPS04 9 ษ‫ڧ‬ձΛָ͠ΉΞϓϦ ιʔείʔυΛ5XJUUFSͱ(JTUʹಉ࣌౤ߘͰ͖Δ ษ‫ڧ‬ձͰ஌‫ݟ‬ΛΈΜͳͱ‫ڞ‬༗͍ͨ࣌͠ͱ͔ʹศརʂ Ͱ͖Δ͜ͱ #devsap

5.

4XJGU XJMMCFSFMFBTFETPNFUJNFJOMBUF

6.

ͦΖͦΖ4XJGUΛ ೺Ѳ͓͔ͯ͠ͳ͚Ε͹ͳΒͳ͍

7.

4XJGU ֓ཁΛͬ͘͟Γԡ͑͞Δ

8.

4XJGU֓ཁ

9.

4XJGU τοϓχϡʔε ⾣ ೥ͷ‫ޙ‬൒ʹϦϦʔε ⾣ 4XJGU͔Βͷഁյతͳ࢓༷มߋ

10.

4XJGU ໨ඪ ⾣ 4XJGU‫ޠݴ‬Λ֬ఆɾख़੒ͤ͞Δ ⾣ 4XJGUҎ߱Ͱͷιʔείʔυͷ ‫׵ޓ‬ੑΛ໨ࢦ͢ʢ౒ྗ໨ඪʣ ⾣ 4XJGUҎ߱ͷιʔε‫׵ޓ‬ഁյ͸ ࠷খ‫ݶ‬ͷӨ‫Ͱڹ‬ͷ࣮‫ݱ‬Λ໨ࢦ͢

11.

4XJGU ཁ఺ ⾣ ৽͍͠"1*ΨΠυϥΠϯ ⾣ ‫༷࢓ޠݴ‬Λચ࿅ ⾣ 0CKFDUJWF$΍$ͷίʔυΛ 4XJGUจԽʹ߹Θͤͯऔࠐ ⾣ ίϯύΠϥ΍*%&ͷ඼࣭޲্ ⾣ 4XJGUύοέʔδϚωʔδϟʔ

12.

4XJGU ண஍఺ ‫ޠݴ‬ͷ҆ఆԽΛਤΓ ଞ‫΁ڥ؀‬ͷҠ২ੑΛ‫ݟ‬ਾ͑Δ

13.

4XJGU ࢟੎ ໨ඪୡ੒ͷͨΊʹ͸ ιʔε‫׵ޓ‬ੑͷഁյ΋ࣙ͞ͳ͍ߏ͑

14.

"1*%FTJHO(VJEFMJOFT

15.

ΨΠυϥΠϯͷద༻ 4& 4&

16.

"1*%FTJHO(VJEFMJOFT झࢫ ⾣ ؆ܿʹ௲ΒΕͨΨΠυϥΠϯ ⾣ ૉఢͳ"1*Λॻ͜͏ʂ ⾣ 4XJGUࣗ਎΋ΨΠυϥΠϯʹԊͬͯมߋ IUUQTTXJGUPSHEPDVNFOUBUJPOBQJEFTJHOHVJEFMJOFT

17.

"1*%FTJHO(VJEFMJOFT ίʔυͷํ਑ ⾣ ࣮ମ͸̍ͭఆٛ͠ɺ‫܁‬Γฦ͠࢖͏ ⾣ "1*ͷσβΠϯ͕ ‫ػ‬ೳͷར༻Λ໌ྎ͔ͭ؆ܿʹ͢Δ ⾣ ΨΠυϥΠϯͷ‫ݪ‬ଇΑΓ΋ ίϯςΩετͰͷ໌շ͕͞༏ઌ ⾣ ࠷΋গͳ͍จࣈ਺Ͱ ίʔυΛॻ͘ͷ͕ඒಙͰ͸ͳ͍

18.

"1*%FTJHO(VJEFMJOFT υΩϡϝϯτͷํ਑ ⾣ υΩϡϝϯτ࡞੒͕ "1*σβΠϯΛચ࿅͢Δ ⾣ ࣗવͳ‫ݴ‬༿Ͱॻ͚ͳ͍ͳΒ "1*σβΠϯ͕ؒҧ͍ͬͯΔ͔΋ ⾣ υΩϡϝϯτΛॻ͘͜ͱΛ ઌૹΓ͠ͳ͍͜ͱ

19.

"1*%FTJHO(VJEFMJOFT ѻΘΕ͍ͯΔσβΠϯࢦ਑ ⾣ ໊લ෇͚ʹ͍ͭͯ ⾣ ྲྀΕΔΑ͏ʹ࢖͑ΔΑ͏ʹ ⾣ ઐ໳༻‫ޠ‬Λ࢖͏ͱ͖ͷ஫ҙ ⾣ ‫׳‬शతͳද‫͍ͯͭʹݱ‬ ⾣ ಛผͳ৔໘

20.

"1*%FTJHO(VJEFMJOFTΛಡΉͱ 4XJGU͕ଊ͑΍͘͢ͳΔҹ৅

21.

"1*%FTJHO(VJEFMJOFT ࢀߟࢿྉ IUUQXXXTMJEFTIBSFOFUUPNPIJSPLVNBHBJTXJGUDTXJGU

22.

ඪ४ϥΠϒϥϦ΁ͷద༻ 4&

23.

ඪ४ϥΠϒϥϦ΁ͷద༻ ϓϩτίϧ໊ͷl5ZQFz઀ඌࣙΛ࡟আ ⾣ ϓϩτίϧ໊͔Β5ZQFΛ࡟আ ⾣ ओཁͳ‫ͱ໊ܕ‬ඃΒͳ͍Α͏ʹɺಛผʹ l1SPUPDPMz઀ඌࣙΛ෇͚Δ৔߹΋͋Δ 4XJGU 4XJGU $PMMFDUJPO $PMMFDUJPO5ZQF *OUFHFS *OUFHFS5ZQF &SSPS1SPUPDPM &SSPS5ZQF ˞‫͔ͭز‬ൈਮ

24.

ඪ४ϥΠϒϥϦ΁ͷద༻ l(FOFSBUPSzΛl*UFSBUPSz΁ ⾣ l(FOFSBUPSz͔Βl*UFSBUPSzʹ໊শมߋ ⾣ ؔ࿈͢Δ΋ͷ΋‫ؚ‬Ί໊ͯশมߋ 4XJGU 4XJGU *OUFSBUPS1SPUPDPM (FOFSBUPS5ZQF NBLF*UFSBUPS HFOFSBUF *OEFYJOH*UFSBUPS&MFNFOUT *OEFYJOH(FOFSBUPS&MFNFOUT ˞‫͔ͭز‬ൈਮ

25.

ඪ४ϥΠϒϥϦ΁ͷద༻ #JU‫ܕ‬ͷ࡟আ ⾣ #JU‫࡟͕ܕ‬আ͞Εͨ ⾣ ୅ΘΓʹ*OU‫ܕ‬Λ࢖͏ ⾣ #JUͷ୅ସʹ*OU͸ද‫͏ͦ͗͢ߴ͕ྗݱ‬ enum Bit : Int, Comparable, RandomAccessIndexType { case Zero case One } 4XJGUY

26.
[beta]
ඪ४ϥΠϒϥϦ΁ͷద༻

ϙΠϯλʔ‫ܕ‬ͷ‫ܕ‬Ҿ਺໊Λมߋ
⾣ ‫ܕ‬Ҿ਺໊Λ

l.FNPSZz͔Βl1PJOUFFzʹมߋ

struct UnsafePointer<Pointee> : Strideable, Hashable {
var pointee: Pointee { get }
subscript(i: Int) -> Pointee { get }
}

4XJGU1SFWJFX

27.

ඪ४ϥΠϒϥϦ΁ͷద༻ ϝιου໊ͷมߋ ⾣ ෭࡞༻Λ൐Θͳ͍৔߹͸໊ࢺతͳ໊લ ໊લ͕ಈࢺతͳΒա‫͢ʹܗڈ‬Δ ⾣ ෭࡞༻Λ൐͏৔߹͸໋ྩతͳಈࢺͷ໊લ 4XJGU 4XJGU EJTUBODF UP EJTUBODF5P TPSUFE TPSU TPSU TPSU*O1MBDF SFWFSTFE SFWFSTF FOVNFSBUFE FOVNFSBUF ˞‫͔ͭز‬ൈਮ

28.

'PVOEBUJPO΁ͷద༻ 4&

29.

'PVOEBUJPO΁ͷద༻ /4໊લۭؒͷ࡟আ ⾣ Ϋϥε໊ͷ/4઀಄ࣙΛ࡟আ ⾣ ͍͔ͭ͘ͷΫϥεͷ઀಄ࣙ͸࢒Δ 4XJGU 4XJGU #VOEMF /4#VOEMF 'JMF.BOBHFS /4'JMF.BOBHFS 63-4FTTJPO /463-4FTTJPO ˞‫͔ͭز‬ൈਮ

30.

'PVOEBUJPO΁ͷద༻ ͍͔ͭ͘ͷ໊લۭؒ͸ଘଓ ⾣ 0CKFDUJWF$ͱͷ݁ͼ෇͖͕‫͍ڧ‬΋ͷ ⾣ ϓϥοτϑΥʔϜʹΏ͔Γͷਂ͍΋ͷ ⾣ σʔλ‫৽͕ܕ‬ઃ͞Εͨ΋ͷ 4& 4XJGU ଘଓཧ༝ /40CKFDU 0CKFDUJWF$ͱਂؔ͘܎ /46TFS/PUJpDBUJPO ϓϥοτϑΥʔϜΏ͔Γͷ΋ͷ /4%BUB %BUB‫ܕ‬Λ৽ઃͯ͠ϒϦοδ /41SFEJDBUF ࠓ‫ޙ‬ɺ஋‫ܕ‬ͷ৽ઃΛ‫ܭ‬ը ˞‫͔ͭز‬ൈਮ

31.

'PVOEBUJPO΁ͷద༻ ໊લۭؒͷ࡟আ͍ͭͰʹ໊শมߋ ⾣ ྑ͍‫ػ‬ձͳͷͰ໊শมߋ ⾣ ඞཁʹԠͯ͡ωετ‫͢ʹܕ‬Δ ⾣ ‫͔ͭز‬͸ະ࣮૷ʁ /40VUQVU4USFBN 4XJGU 4XJGU 1SPDFTT /45BTL /44USJOH&ODPEJOH /44USJOH&ODPEJOH 4USJOH&ODPEJOH /44USJOH&ODPEJOH 63-3FRVFTU$BDIF1PMJDZ /463-3FRVFTU$BDIF1PMJDZ ˞‫͔ͭز‬ൈਮ

32.

‫ࢥޠݴ‬૝ʹؔ͢Δมߋ

33.

໭Γ஋Λ࢖Θͳ͍ͱ‫ʹࠂܯ‬ 4&

34.

ඪ४ϥΠϒϥϦ΁ͷద༻ Ҏલ͸ɺ໭Γ஋Λ࢖Θͳͯ͘΋‫͠ͳࠂܯ‬ ⾣ 4XJGU͸ɺ ؔ਺ͷ݁ՌΛड͚औΒͳͯ͘΋‫͞ࠂܯ‬Εͳ͍ ⾣ ‫ͳ͍ͨ͠ࠂܯ‬Β!XBSO@VOVTFE@SFTVMUΛ෇༩ class Item { // 戻り値を使わないと警告される @warn_unused_result func makeFilter() -> Filter {…} // 戻り値を使わなくても警告されない func apply(filter: Filter) -> Item {…} } 4XJGUY

35.

ඪ४ϥΠϒϥϦ΁ͷద༻ ࠓ‫ޙ‬͸ɺ໭Γ஋Λ࢖Θͳ͍ͱ‫͋ࠂܯ‬Γ ⾣ 4XJGU͸ɺ ؔ਺ͷ݁ՌΛड͚औΒͳ͍ͱ‫͞ࠂܯ‬ΕΔ ⾣ ‫ࠂܯ‬ෆཁͳΒ!EJTDBSEBCMF3FTVMUΛ෇༩ class Item { // 戻り値を使わないと警告される func makeFilter() -> Filter {…} // 戻り値を使わなくても警告されない @discardableResult func apply(filter: Filter) -> Item {…} } 4XJGU1SFWJFX

36.

*NQMJDJUMZ6OXSBQQFE0QUJPOBMഇࢭ΁ 4&

37.

*NQMJDJUMZ6OXSBQQFE0QUJPOBMഇࢭ΁ ֓ཁ ⾣ ҉໧Ξϯϥοϓ!͸*60 ଐੑ ͱͯ͠ѻ͏ ⾣ *NQMJDJUMZ6OXSBQQFE0QUJPOBM͸ഇࢭͷํ޲΁ ႁᡔᇶ⻝әѬᒇᦸӓҴӴ let optionalValue: Int! = 100 4XJGU1SFWJFX

38.

*NQMJDJUMZ6OXSBQQFE0QUJPOBMഇࢭ΁ ೝࣝͷ͞Ε͔ͨ ⾣ *NQMJDJUMZ6OXSBQQFE0QUJPOBMͱͯ͠ೝࣝ ⾣ ‫ج‬ຊతͳ࢖͍ํ͸ैલͱಉ͡ // 今は ImplicitlyUnwrappedOptional 型として認識 var a: Int! // こちらは従来通り Optional 型として認識 var b: Int? 4XJGU1SFWJFX

39.

*NQMJDJUMZ6OXSBQQFE0QUJPOBMഇࢭ΁ ਪ࿦͸0QUJPOBMѻ͍ ⾣ ‫ܕ‬ਪ࿦Ͱ͸0QUJPOBMѻ͍ ⾣ ࣦഊՄೳΠχγϟϥΠβͱ૬ੑ͕ྑ͍ enum Bit : Int { case zero case one } ໭Γ஋ͷ‫ܕ‬͸#JU‫ܕ‬ let bit = Bit(rawValue: 1) ड͚Δม਺͸#JU ‫ͱܕ‬ਪ࿦͞Εɺ ஋͕͋Δ͔Λ൱Ԡͳ͘ҙࣝͤ͞ΒΕΔ 4XJGU1SFWJFX

40.

খ਺఺਺ϓϩτίϧ 4&

41.

খ਺఺਺ϓϩτίϧ ϓϩτίϧઃ‫ܭ‬ͷௐ੔ ⾣ େখൺֱՄೳ ⾣ খ਺఺਺ϦςϥϧʹରԠ ⾣ ৒༨ԋࢉࢠͷഇࢭ ⾣ ‫ج‬ຊతͳఆ਺ͷఏ‫ڙ‬ ⾣ 'MPBU‫'͕ܕ‬MPBUJOH1PJOUʹ४‫ڌ‬

42.

খ਺఺਺ϓϩτίϧ 'MPBUJOH1PJOUϓϩτίϧ ⾣ Ҏલ͸ɺม‫׵‬ΠχγϟϥΠβͱঢ়‫گ‬൑ఆɺ ಛघঢ়ଶʢ㱣 /B/ Λࣔ͢ϓϩύςΟͷΈ ⾣ ஋ੜ੒ɺԋࢉɺఆ਺ͳͲͷ‫ػ‬ೳΛ௥Ճ ߲໨ ༻్ *OUFHFS-JUFSBM$POWFSUJCMF ੔਺ϦςϥϧʹରԠ JOJU TJHOFYQPOFOUTJHOJpDBOE ෆಈখ਺఺Ͱͷॳ‫ظ‬Խ TUBUJDWBSSBEJY ‫਺ج‬ TUBUJDWBSQJ ԁप཰ WBSVNQ ࣍ʹද‫ݱ‬Մೳͳ஋ͱͷࠩ෼ ˞‫͔ͭز‬ൈਮ

43.

খ਺఺਺ϓϩτίϧ #JOBSZ'MPBUJOH1PJOUϓϩτίϧ ⾣ ‫͕̎਺ج‬ͷුಈখ਺఺਺ද‫ݱ‬ ⾣ 'MPBUJOH1PJOUϓϩτίϧΛ‫ܧ‬ঝ ⾣ ϏοτύλʔϯʹΑΔૢ࡞Λ௥Ճ ߲໨ ༻్ 3BX4JHOJpDBOE Ծ਺ද‫͠ͳ߸ූ͏࢖Ͱݱ‬੔਺‫ܕ‬ 3BX&YQPOFOU ࢦ਺ද‫͠ͳ߸ූ͏࢖Ͱݱ‬੔਺‫ܕ‬ TUBUJDWBS TJHOJpDBOE#JU$PVOU WBSTJHOJpDBOE#JU1BUUFSO Ծ਺ද‫͑࢖Ͱݱ‬ΔϏοτ਺ WBSCJOBEF ‫̎਺ج‬Λࢦ਺෦Ͱྦྷ৐ͨ͠஋ Ծ਺Λද‫͢ݱ‬ΔϏοτύλʔϯ ˞‫͔ͭز‬ൈਮ

44.
[beta]
খ਺఺਺ϓϩτίϧ

ԋࢉʹରԠ
⾣ ϓϩτίϧࣗ਎͕ԋࢉʹରԠ
⾣ ࢛ଇԋࢉɺେখൺֱ

func add<T: FloatingPoint>(lhs: T, rhs: T) -> T {
return lhs + rhs
}
۩ମతͳ‫ܕ‬Λ૝ఆ͠ͳͯ͘΋ԋࢉՄೳʹ

4XJGU1SFWJFX

45.

'PVOEBUJPOͷ஋‫ܕ‬ 4&

46.

'PVOEBUJPOͷ஋‫ܕ‬ Ҏલͷ'PVOEBUJPOσʔλ‫ܕ‬ ⾣ 'PVOEBUJPOͷσʔλ‫ܕ‬͸ࢀর‫ܕ‬ ⾣ 4XJGUͷՄมੑɾෆมੑͱ૬ੑ͕ѱ͍ enum Item { case binary(NSData) } ՄมੑΛɺએ‫ޚ੍Ͱܕ͘ͳͰݴ‬ let data1: NSMutableData = … let data2: NSData = … ஋‫ܕ‬ͷΠϯελϯεΛੜ੒ let item = Item.binary(data1) data1.appendData(data2) EBUBͷߋ৽͕JUFNʹ΋Ө‫ڹ‬ 4XJGUY

47.

'PVOEBUJPOͷ஋‫ܕ‬ ࠓ‫ޙ‬ͷ'PVOEBUJPOσʔλ‫ܕ‬ ⾣ ैདྷͷࢀর‫ܕ‬Λผͷ஋‫ʹܕ‬ϒϦοδ ⾣ 4XJGUͷՄมੑɾෆมੑͱௐ࿨͢Δ enum Item { case binary(Data) } ՄมੑΛɺએ‫ݴ‬MFU WBSͰ੍‫ޚ‬ var data1: Data = … let data2: Data = … ஋‫ܕ‬ͷΠϯελϯεΛੜ੒ let item = Item.binary(data1) data1.appendData(data2) EBUBͷߋ৽͸JUFNʹӨ‫͠ͳڹ‬ 4XJGU1SFWJFX

48.

'PVOEBUJPOͷ஋‫ܕ‬ ৽͍͠σʔλ‫ܕ‬ ஋‫ܕ‬ ࢀর‫ܕ‬ "⒏OF5SBOTGPSN /4"⒏OF5SBOTGPSN $IBSBDUFS4FU /4$IBSBDUFS4FU /4.VUBCMF$IBSBDUFS4FU %BUF /4%BUF %BUF$PNQPOFOUT /4%BUF$PNQPOFOUT %BUB /4%BUB /4.VUBCMF%BUB *OEFY4FU /4*OEFY4FU /4.VUBCMF*OEFY4FU *OEFY1BUI /4*OEFY1BUI /PUJpDBUJPO /4/PUJpDBUJPO 1FSTPO/BNF$PNQPOFOUT /41FSTPO/BNF$PNQPOFOUT 63- /463- 63-$PNQPOFOUT /463-$PNQPOFOUT 63-2VFSZ*UFN /463-2VFSZ*UFN 66*% /466*%

49.

OJMϙΠϯλʔද‫ݱ‬ 4&

50.
[beta]
OJMϙΠϯλʔද‫ݱ‬

Ҏલ͸ɺϙΠϯλʔࣗ਎Ͱද‫ݱ‬
⾣ ϙΠϯλʔࣗ਎ͰOJMϙΠϯλʔΛද‫ݱ‬
⾣ ϙΠϯλʔ‫ܕ‬ͷྲّྀͰOJM൑ఆ͕ඞཁ
let pointer: UnsafePointer<Int> = 
if pointer != nil {
print(pointer.memory)
}
else {
}
4XJGUY

51.

OJMϙΠϯλʔද‫ݱ‬ ࠓ‫ޙ‬͸ɺΦϓγϣφϧͰද‫ݱ‬ ⾣ OJMϙΠϯλʔ͸ΦϓγϣφϧͰද‫ݱ‬ ⾣ 4XJGUͷྲّྀͰOJM൑ఆ͕Մೳ let pointer: UnsafePointer<Int>? = … if let value = pointer?.pointee { print(value) } else { } 4XJGU1SFWJFX

52.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ 4&

53.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ Ҏલͷ$PMMFDUJPO5ZQFʹඞཁͳ΋ͷ ⾣ ࠷௿‫*ݶ‬OEFYBCMFϓϩτίϧʹ४‫ڌ‬ ⾣ ඞਢͷ࣮૷͸̏ͭ // 最初のインデックス var startIndex: Index { get } // 最後の次のインデックス var endIndex: Index { get } // 指定したインデックスに該当する要素 subscript (position: Index) -> _Element { get } 4XJGUY

54.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ ࠓ‫ޙ‬ͷ$PMMFDUJPOʹඞཁͳ΋ͷ ⾣ ࠷௿‫*ݶ‬OEFYBCMF#BTFϓϩτίϧʹ४‫ڌ‬ ⾣ ࠓ·ͰʹՃ͑JOEFY BGUFS ͕࣮૷ඞਢʹ // 最初のインデックス var startIndex: Index { get } // 最後の次のインデックス var endIndex: Index { get } // 指定したインデックスに該当する要素 subscript (position: Index) -> _Element { get } // あるインデックスの次のインデックスを取得 func index(after i: Index) -> Index 4XJGU1SFWJFX

55.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ ํ޲ੑ $PMMFDUJPO͕*OEFYΛ੍‫ޚ‬ *OEFY͸ൺֱੑ͚ͩΛද‫ݱ‬

56.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ Ҏલͷ$PMMFDUJPO5ZQFͷํ޲ੑ ⾣ $PMMFDUJPO͕ूੵੑΛද‫ݱ‬ ⾣ 'PSXBSE*OEFY5ZQF #JEJSFDUJPOBM*OEFY5ZQF  3BOEPN"DDFTT*OEFY5ZQFͰҠಈੑΛද‫ݱ‬ // 前方移動性をもつ索引型 protocol ForwardIndexType: Equatable // 前後方移動性をもつ索引型 protocol BidirectionalIndexType: ForwardIndexType // どこへも自由に即時移動できる索引型 protocol RandomAccessIndexType: BidirectionalIndexType // コレクションは集積性と、使用する索引を規定 protocol CollectionType { associatedtype Index : ForwardIndexType 4XJGUY

57.

ίϨΫγϣϯͷ࠶ઃ‫ܭ‬ ࠓ‫ޙ‬ͷ$PMMFDUJPOͷํ޲ੑ ⾣ $PMMFDUJPO͕ूੵੑͱҠಈੑΛද‫ݱ‬ ⾣ $PMMFDUJPO #JEJSFDUJPOBM$PMMFDUJPO  3BOEPN"DDFTT$PMMFDUJPOͰ૯‫ׅ‬తʹද‫ݱ‬ // 前方移動性をもつコレクション protocol Collection: Indexable // 前後方移動性をもつコレクション protocol BidirectionalCollection: BidirectionalIndexable // 範囲内を自由に即時移動できるコレクション protocol RandomAccessCollection: RandomAccessIndexable // インデックスに求められるのは比較性のみ protocol Collection { associatedtype Index : Comparable 4XJGU1SFWJFX

58.

$PMMFDUJPOͷ࠶ઃ‫ܭ‬ ࠶ઃ‫ܭ‬ͷཁ఺ ⾣ ίϨΫγϣϯ͕ҠಈੑΛओମతʹද‫ݱ‬ ⾣ ࡧҾ͸ಛผࢹͤͣɺൺֱՄೳͳ஋Ͱ͋Δ͜ͱ // このコレクションは前後へ移動可能 struct MyCollection : BidirectionalCollection { // 索引として文字列を使う typealias Index = String } 4XJGU1SFWJFX

59.

$PMMFDUJPOͷ࠶ઃ‫ܭ‬ ࠶ઃ‫ܭ‬ͷޮՌ ⾣ l࣍zͷ֓೦͕͋ΔࡧҾͷ$PMMFDUJPO͸ෳࡶʹ ⾣ l࣍z͕$PMMFDUJPOʹґଘ͢Δ࣮૷͸؆ུԽ // Int を索引にもつデータ表現は実装の手間が増える struct MyArray<Element> : RandomAccessCollection { typealias Index = Int } // String を索引にもつデータ表現は簡略化される struct Namelist : Collection { typealias Index = String 4XJGU1SFWJFX

60.

ΠςϨʔλʔͰͷOJMอূ 4&

61.

ΠςϨʔλʔͰͷOJMอূ ࣍ͷ஋͕ͳ͍ͱ͖͸OJMΛ໿ଋ ⾣ ͜Ε·Ͱ͸QSFDPOEJUJPO'BJMVSFͷՄೳੑ΋ ⾣ ࠓ‫ޙ‬͸ɺඞͣOJMͰද‫͢ݱ‬Δํ਑ʹ "EWBODFUPUIFOFYUFMFNFOUBOESFUVSOJU PSAOJMA JGOPOFYUFMFNFOUFYJTUT 0ODFAOJMAIBTCFFOSFUVSOFE BMMTVCTFRVFOU DBMMTSFUVSOAOJMA 4XJGU1SFWJFX

62.

#PPMFBO5ZQFϓϩτίϧͷഇࢭ 4&

63.

#PPMFBO5ZQFϓϩτίϧͷഇࢭ ࠜ‫ڌ‬ ⾣ ਅِ஋ͷந৅Խ͸ෳࡶ͞Λট͘ ⾣ ‫ߦݱ‬ͷ"1*Ͱ͸େ఍#PPM‫ܕ‬Λ࠾Δ ⾣ 0CK$#PPMͱ#PPMͷ૬‫ʹޓ‬ม‫׵‬Մೳ protocol BooleanType { var boolValue: Bool { get } } 4XJGUY

64.

#PPMFBO5ZQFϓϩτίϧͷഇࢭ ഇࢭʹΑΔӨ‫ڹ‬ʢ༧ఆʣ ⾣ #PPMFBO5ZQFϓϩτίϧ͕ফ໓ ⾣ ԋࢉࢠ!, &&, ||Λ#PPM‫Ͱܕ‬ѻ͏ func && (lhs: Bool, rhs: () -> Bool) -> Bool func || (lhs: Bool, rhs: () -> Bool) -> Bool func ! (a: Bool) -> Bool 4XJGU1SFWJFX

65.

จ๏ʹؔ͢Δมߋ

66.

ԋࢉࢠηΫγϣϯͰͷίϝϯτ 4&

67.

ԋࢉࢠηΫγϣϯͰͷίϝϯτͷѻ͍มߋ ֓ཁ ⾣ ίϝϯτͷҐஔͰԋࢉࢠͷղऍ͕มΘ͍ͬͯͨ ⾣ ίϝϯτΛۭനจࣈʹͯ͠ɺ௚‫ײ‬తͳղऍʹ if /* comment */!isValid { ... } !͕ɺ྆ଆΛѻ͏தஔԋࢉࢠͱͯ͠ѻΘΕ͍ͯͨΒ͍͠ value +/* comment */coefficient +/*͕ɺ྆ଆΛѻ͏தஔԋࢉࢠͱͯ͠ѻΘΕ͍ͯͨΒ͍͠ 4XJGUY

68.

ԋࢉࢠηΫγϣϯͰͷίϝϯτͷѻ͍มߋ ղऍͯ͠΋Β͑ͳ͘ͳΔॻࣜ ⾣ ৽ͨʹ4XJGUͰղऍͰ͖ͳ͘ͳΔͷ͕͋Δ ⾣ ίϝϯτ͕ۭനจࣈѻ͍ʹͳΔͷ͕Ө‫ڹ‬ optionalArray/* Comment */?.count ?͕༧‫͍ͳ͠ظ‬จࣈͱͯ͠ೝࣝ͞ΕΔΑ͏ʹͳΔ value+/* comment */coefficient +͕ɺ‫ޙ‬ஔԋࢉࢠͱͯ͠ѻΘΕΔΑ͏ʹͳΔ 4XJGU1SFWJFX

69.

Ҿ਺Ϧετͷ‫ހׅ‬Λඞਢʹ 4&

70.

Ҿ਺Ϧετͷ‫ހׅ‬Λඞਢʹ ֓ཁ ⾣ Ҿ਺͕̍ͭͰ΋ɺ‫ހׅ‬ͷলུΛෆՄʹ ⾣ Ҿ਺ϦετͷॻࣜΛटඌҰ؏͢Δ func f: (Type) -> Type = { } func test() -> (Type) -> Type { } func test(f: (Type) -> Type) { } 4XJGU1SFWJFX

71.

Ҿ਺Ϧετͷ‫ހׅ‬Λඞਢʹ ΫϩʔδϟʔͷলུॻࣜͰͷ‫ހׅ‬ ⾣ ໊લΛ౰ͯΔͷʹ࢖͏෦෼Ͱ͸লུՄೳ let f: (Type) -> Bool = { value in } 4XJGU1SFWJFX

72.

Ҿ਺ϥϕϧ໊ͷ‫ن‬ଇΛ౷Ұ 4&

73.

Ҿ਺ϥϕϧ໊ͷ‫ن‬ଇΛ౷Ұ ֓ཁ ⾣ ୈ̍Ҿ਺ͷಛྫΛഇࢭɺશͯͰಉ͡‫ن‬ଇʹ ⾣ ΨΠυϥΠϯͷϝιου໋໊‫ن‬ଇ͕ಈ‫ػ‬ func something(first: Int, second: Int, third: Int) { } ◌㮫ᐠᡔҶᢡᇰӑ⍋∪ҿӶӔҹӔӍӉ something(first: 1, second: 10, third: 3) ؔ਺ɺϝιουɺΠχγϟϥΠβʔͷ શͯͷҾ਺ϥϕϧ͕ಉ͡ϧʔϧʹ౷Ұ 4XJGU1SFWJFX

74.

Ҿ਺ϥϕϧ໊ͷ‫ن‬ଇΛ౷Ұ ୈ̍Ҿ਺ͷϥϕϧ໊͸มߋՄೳ ⾣ ֎෦Ҿ਺໊Λఴ͑Ε͹มߋՄೳ ⾣ ‫Ͱ_߸ه‬Ҿ਺ϥϕϧΛলུՄೳ // ラベル名を label にする func function(label value: Int) { } ◌㮫ᐠᡔӘՑՁՓൻӼ⍋∪Ӄӵ func function(_ label value: Int) { } 4XJGU1SFWJFX

75.

ଐੑҾ਺ͷ&RVBMΛ$PMPOʹมߋ 4&

76.

ଐੑҾ਺ͷ&RVBMΛ$PMPOʹมߋ ֓ཁ ⾣ ଐੑҾ਺ͷ஋Λ:Ͱද‫͢ݱ‬Δ ⾣ ୅ೖͱ͸ҧ͏Ͱ͠ΐ͏ʁͱ͍͏Ձ஋‫؍‬ @available(*, unavailable, renamed: "NewProtocol") typealias PreviousProtocol = NewProtocol 4XJGU1SFWJFX

77.

ϝϯόʔࢀরͰ࢖͑Δ༧໿‫ޠ‬ 4&

78.

ϝϯόʔࢀরͰ࢖͑Δ༧໿‫ޠ‬ ΄΅ࣗ༝ʹ༧໿‫ޠ‬Λ࢖༻Մೳʹ ⾣ ࢀর࣌ɺ΄΅ࣗ༝ʹ༧໿‫͑࢖͕ޠ‬Δ ⾣ ఆٛͰ͸AA͕ඞཁ // 定義では `` が必要 enum DrawingStyle { case `default` case `repeat` case fit } // 使用時は `` が不要 let style = DrawingStyle.default 4XJGU1SFWJFX

79.

ϝϯόʔࢀরͰ࢖͑Δ༧໿‫ޠ‬ ‫ܕ‬ͷϝϯόʔʹ͍ͭͯ΋ಉ༷ ⾣ ϓϩύςΟ΍ϝιουͰ΋ಉ༷ // 定義では `` が必要 class Object { var `default`: Int func `repeat`(_ times: Int) -> String { … } } // 使用時は `` が不要 let object = Object() let value = object.default 4XJGU1SFWJFX

80.

ϝϯόʔࢀরͰ࢖͑Δ༧໿‫ޠ‬ ࢖༻Ͱ͖ͳ͍༧໿‫ޠ‬ ⾣ ‫ʹޠݴ‬ΑΔධՁ͞ΕΔ‫ޠ‬͸ର৅֎ ⾣ ͦΕΒΛ࢖͏ͱ͖͸AAͰ‫ׅ‬Δ // 定義では `` が必要 enum Evaluate { case `self` case `dynamicType` } // 使用時も `` が必要 let eval = Evaluate.`self` 4XJGU1SFWJFX

81.

QSPUPDPM" #ΛԋࢉࢠͰද‫ݱ‬ 4&

82.

QSPUPDPM" #ΛԋࢉࢠͰද‫ݱ‬ ϓϩτίϧͷ૊Έ߹ΘͤΛͰද‫ݱ‬ ⾣ ͜Ε·Ͱ͸QSPUPDPM" #Ͱද‫ݱ‬ ⾣ ࠓ‫ޙ‬͸"#Ͱද‫ݱ‬ʢ༧ఆʣ // プロトコル型で使う let p: A & B = Value() // 型引数で使う func doSomething<T: A & B>(_ value: T) { } 4XJGU1SFWJFX

83.

-JUFSBM$POWFSUJCMFͷ໊শมߋ 4&

84.

-JUFSBM$POWFSUJCMFͷ໊শมߋ ϓϩτίϧͷҙਤΛ໌֬Խ ⾣ $POWFSUJCMFͷҙຯ͕ෆ໌ྎ ⾣ &YQSFTTJCMF#Zʹมߋʢ༧ఆʣ 4XJGU 4XJGU &YQSFTTJCMF#Z*OUFHFS-JUFSBM *OUFHFS-JUFSBM$POWFSUJCMF &YQSFTTJCMF#Z4USJOH-JUFSBM 4USJOH-JUFSBM$POWFSUJCMF &YQSFTTJCMF#Z"SSBZ-JUFSBM "SSBZ-JUFSBM$POWFSUJCMF &YQSFTTJCMF#Z/JM-JUFSBM /JM-JUFSBM$POWFSUJCMF &YQSFTTJCMF#Z4USJOH*OUFSQPMBUJPO 4USJOH*OUFSQPMBUJPO$POWFSUJCMF ˞‫͔ͭز‬ൈਮ

85.

ԋࢉࢠΛ‫૷࣮͕ܕ‬ 4&

86.

ԋࢉࢠΛ‫૷࣮͕ܕ‬ ֓ཁ ⾣ ϓϩτίϧ͕ཁ‫͢ٻ‬ΔԋࢉࢠΛ‫૷࣮Ͱܕ‬ʢ༧ఆʣ ⾣ ॴଐ͕໌ྎʹͳΔ struct Value : Equatable { static func == (lhs: Value, rhs: Value) -> Bool { } } 4XJGU1SFWJFX

87.

‫ط‬ఆ஋Λ࣋ͭҾ਺ͷॱংΛ‫ݻ‬ఆ 4&

88.

‫ط‬ఆ஋Λ࣋ͭҾ਺ͷॱংΛ‫ݻ‬ఆ ֓ཁ ⾣ ‫׳‬शͱͯ͠࢒͍ͬͯͨฒͼସ͑Λഇࢭ ⾣ Ҿ਺ͷॱ൪͸"1*σβΠϯͱͯ͠΋ॏཁ // 既定値が指定された関数があったとき func something(a:Int = 0, b:Int = 1, c:Int = 2) { } // 異なる順番で引数を渡せなくなった something(b: 10, a: 20) FSSPSBSHVNFOUBNVTUQSFDFEFBSHVNFOUC 4XJGU1SFWJFX

89.

!OPFTDBQFͱ!BVUPDMPTVSFΛҠಈ 4&

90.

!OPFTDBQFͱ!BVUPDMPTVSFΛҠಈ ֓ཁ ⾣ ม਺ଐੑ͔Β‫ܕ‬ଐੑ΁มߋ ⾣ ‫ܕ‬ͷੑ࣭Λత֬ʹઆ໌Ͱ͖ΔΑ͏ʹ͢Δ func function(@noescape f: () -> Int) { } XBSOJOH!OPFTDBQFJTOPXBOBUUSJCVUFPOBQBSBNFUFSUZQF  JOTUFBEPGPOUIFQBSBNFUFSJUTFMG func function(@autoclosure f: () -> Int) { } 4XJGUY

91.

!OPFTDBQFͱ!BVUPDMPTVSFΛҠಈ ৽͍͠ॻࣜ ⾣ ‫!ʹܕ‬OPFTDBQF΍!BVUPDMPTVSFΛఴ͑Δ ⾣ !OPFTDBQFͳΫϩʔδϟʔΈ͍ͨʹಡΊΔ func function(f: @noescape () -> Int) { } func function(f: @autoclosure () -> Int) { } 4XJGU1SFWJFX

92.

!OPFTDBQF

93.

‫ʹܕ‬ରͯ͠!OPFTDBQFΛఆٛ ߴ֊ؔ਺ͰҖྗΛൃ‫ش‬ ⾣ !OPFTDBQFͳؔ਺‫ܕ‬ΛฦͤΔ ⾣ ͦͷ··!OPFTDBQFΛऔΔؔ਺ʹ౉ͤΔ func function(f: () -> Int) -> (@noescape (Int) -> Int) -> Int { return { g in g(f()) } } 4XJGU1SFWJFX

94.

!BVUPDMPTVSF

95.

‫ʹܕ‬ରͯ͠!BVUPDMPTVSFΛఆٛ ߴ֊ؔ਺ͰҖྗΛൃ‫ش‬ ⾣ !BVUPDMPTVSFͳؔ਺‫ܕ‬ΛฦͤΔ ⾣ ‫ͼݺ‬ग़͠ઌͰͷར༻ΛγϯϓϧʹͰ͖Δ func function() -> (@autoclosure () -> Int) -> Int { return { (f: @autoclosure () -> Int) in f() } } ‫Ͱ఺࣌ݱ‬͸࠷௿‫ݶ‬ɺҾ਺Ϧετͷఆ͕ٛඞཁͳ༷ࢠ // 関数で得た、関数を取る関数に、値をそのまま渡せる let f = function() let result = f(100) 4XJGU1SFWJFX

96.

‫ʹܕ‬ରͯ͠JOPVUΛఆٛ 4&

97.

‫ʹܕ‬ରͯ͠JOPVUΛఆٛ ֓ཁ ⾣ ϥϕϧʹఴ͍͑ͯͨJOPVUΛ‫΁ܕ‬ ⾣ ϥϕϧͱJOPVU͕۠ผ͠ʹ͍ͨ͘Ί func method(inout result: Int) { } FSSPSJOPVUCFGPSFBQBSBNFUFSOBNFJTOPUBMMPXFE QMBDFJUCFGPSFUIFQBSBNFUFSUZQFJOTUFBE ՑՁՓҶ⋭࿾ӃӵӘӒൺӂ࿾ᙟ func method(inOut result: Int) { } 4XJGUY

98.

‫ʹܕ‬ରͯ͠JOPVUΛఆٛ ৽͍͠ॻࣜ ⾣ ‫ʹܕ‬ఴ͑Δ͜ͱͰϥϕϧͱ໌֬ʹ۠ผՄೳ ⾣ Ͱ΋JOPVU‫Ͱ ܕ‬͸ແ͍Α͏ͳ‫ؾ‬͸͢Δʁ func method(result: inout Int) { } ஗㋚ႁᡔൻӘፗҶՑՁՓൻӑҬӵҽӒҶᣀ⎰ func method(inOut result: inout Int) { } 4XJGU1SFWJFX

99.

‫ʹܕ‬ରͯ͠JOPVUΛఆٛ ؔ਺‫ܕ‬ͷ໭Γ஋Ͱ࢖͑Δ ⾣ JOPVUͳؔ਺‫ܕ‬ΛฦͤΔ ⾣ ͪΌΜͱJOPVUͱͯ͠‫ػ‬ೳ͢Δ func function() -> (result: inout Int) -> Void { return { (result: inout Int) -> Void in result = 700 } } 4XJGU1SFWJFX

100.

‫ʹܕ‬ରͯ͠JOPVUΛఆٛ ؔ਺‫ܕ‬ͷม਺Ͱ΋࢖͑Δ ⾣ ؔ਺‫ܕ‬ͷม਺Ͱ΋JOPVU͕Մೳ ⾣ ࢖͍ํ͸ීஈͷͱ͓Γ let f: (inout Int) -> Void = { return { $0 = 5000 } } 4XJGU1SFWJFX

101.

JOPVUͷΩϟϓνϟΛ!OPFTDBQFʹ੍‫ݶ‬ 4&

102.

JOPVUͷΩϟϓνϟΛ!OPFTDBQFʹ੍‫ݶ‬ ֓ཁ ⾣ JOPVUม਺ͷΩϟϓνϟΛ!OPFTDBQFʹ੍‫ݶ‬ ⾣ ಡΈऔΓઐ༻ͱͯ͠໌ࣔΩϟϓνϟՄೳ func something(value: inout Int) { let noescaped: @noescape () -> Void = { value = 10 } let escaped: () -> Void = { [value] in print(value) ಡΈऔΓઐ༻ͱͯ͠ } ΩϟϓνϟՄೳ } 4XJGU1SFWJFX

103.

σόοάࣝผࢠͷมߋ 4& 4&

104.

σόοάࣝผࢠͷϞμϯԽͱᐆດੑͷղফ ֓ཁ ⾣ Ͱ࢝·ΔখจࣈͷΩϟϝϧέʔεʹมߋ ⾣ ࠓ·Ͱ͸@@Ͱ‫ׅ‬ΒΕͨεωʔΫέʔε 4XJGU 4XJGU ༻్ pMF @@'*-&@@ ϑΝΠϧ໊ MJOF @@-*/&@@ ߦ൪߸ DPMVNO @@$0-6./@@ จࣈ൪߸ GVODUJPO @@'6/$5*0/@@ ؔ਺໊ TPVSDF-PDBUJPO MJOF Ґஔ৘ใͷมߋ ETPIBOEMF @@%40@)"/%-&@@ %40ϋϯυϧ

105.

σόοάࣝผࢠͷϞμϯԽͱᐆດੑͷղফ ະ࣮૷ͷࣝผࢠ ⾣ ϓϩϙʔβϧʹ‫͞ࡌه‬Ε͍ͯΔ ⾣ 4XJGU1SFWJFXͰ͸ఏ‫͞ڙ‬Ε͍ͯͳ͍ 4XJGU ༻్ pMFOBNF ύεΛ‫͍ͳ·ؚ‬ϑΝΠϧ໊ TZNCPM ໊લۭؒ΍Ҿ਺Λ‫ؚ‬ΉγϯϘϧ໊

106.

จ๏ʹؔ͢Δ௥Ճ

107.

δΣωϦοΫͳ‫ܕ‬ΤΠϦΞε 4&

108.

δΣωϦοΫͳ‫ܕ‬ΤΠϦΞε ֓ཁ ⾣ ‫ܕ‬ΤΠϦΞεͰδΣωϦοΫ‫ܕ‬Λ࢖༻Մೳ typealias NamedValues<T> = Dictionary<String, T> typealias Vector<T> = (T, T) typealias Filter<T,R> = (T) -> R 4XJGU1SFWJFX

109.

DBTFͰͷෳ਺ύλʔϯϚον 4&

110.

DBTFͰͷෳ਺ύλʔϯϚον ֓ཁ ⾣ ෳ਺ύλʔϯͰϚον͢Δม਺ΛఆٛՄೳ ⾣ ‫ڞ‬௨ͨ͠ॲཧΛ؆୯ʹ‫ࡌه‬Մೳ switch (value1, value2) { case let (value?, nil), let (nil, value?): return value case let (value1?, value2?): return value1 + value2 case (nil, nil): return 0 } 4XJGU1SFWJFX

111.

ͻͱ·ͣɺ͜͜·Ͱ

112.

4XJGUͷ৽‫ػ‬ೳ ͻͱ·ͣɺ͓͠·͍   4&4XJGU"1*ΨΠυϥΠϯ  4&໋໊‫ن‬ଇ΁ͷΨΠυϥΠϯͷద༻  4&"1*΁ͷΨΠυϥΠϯద༻  4&໭Γ஋Λ࢖Θͳ͍ͱ‫ʹࠂܯ‬  4&*NQMJDJUMZ6OXSBQQFE0QUJPOBMഇࢭ΁  4&খ਺఺਺ϓϩτίϧ  4&'PVOEBUJPOͷ஋‫ܕ‬  4&OJMϙΠϯλʔද‫ݱ‬  4&ίϨΫγϣϯͷ࠶ઃ‫ܭ‬

113.

4XJGUͷ৽‫ػ‬ೳ ͻͱ·ͣɺ͓͠·͍   4&ΠςϨʔλʔͰͷOJMอূ  4&#PPMFBO5ZQFϓϩτίϧͷഇࢭ  4&ԋࢉࢠηΫγϣϯͰͷίϝϯτ  4&Ҿ਺Ϧετͷ‫ހׅ‬Λඞਢʹ  4&Ҿ਺ϥϕϧ໊ͷ‫ن‬ଇΛ౷Ұ  4&ଐੑҾ਺ͷ&RVBMΛ$PMPOʹมߋ  4&ϝϯόʔࢀরͰ࢖͑Δ༧໿‫ޠ‬  4&QSPUPDPM" #ΛԋࢉࢠͰද‫ݱ‬  4&-JUFSBM$POWFSUJCMFͷ໊শมߋ

114.

4XJGUͷ৽‫ػ‬ೳ ͻͱ·ͣɺ͓͠·͍   4&ԋࢉࢠΛ‫૷࣮͕ܕ‬  4&‫ط‬ఆ஋Λ࣋ͭҾ਺ͷॱংΛ‫ݻ‬ఆ  4&!OPFTDBQFͱ!BVUPDMPTVSFΛҠಈ  4&‫ʹܕ‬ରͯ͠JOPVUΛఆٛ  4&JOPVUͷΩϟϓνϟΛ!OPFTDBQFʹ੍‫ݶ‬  4&σόοάࣝผࢠͷมߋ  4&MJOFࣝผࢠͷᐆດੑղফ  4&δΣωϦοΫͳ‫ܕ‬ΤΠϦΞε  4&DBTFͰͷෳ਺ύλʔϯϚον