Protocol-Oriented Integers #cswift

164 Views

June 12, 17

スライド概要

Swift 4 から導入される Protocol Oriented Integers の概要を整理してみた資料です。ここで紹介したもの以外にも詳細な機能があったりするので、それは不足するものの、プロトコル指向整数で何ができるのかを感じ取ってもらえる資料になってるかなって思います。2017/06/03 のカジュアル Swift 勉強会で発表しました。

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

profile-image

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

シェア

またはPlayer版

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

ダウンロード

関連スライド

各ページのテキスト
1.

1SPUPDPM0SJFOUFE *OUFHFST 4& ‫۽‬୩༑޺ IUUQF[OFUKQ !ΧδϡΞϧ4XJGUษ‫ڧ‬ձ 5SVOL%FWFMPQNFOU+VOF 

2.

‫۽‬୩༑޺ 5PNPIJSP,VNBHBJ ⾣ 4XJGU‫͕ޠݴ‬௒େ޷͖Ͱ͢ʂ ⾣ ΈΜͳͰָ͠Ήษ‫ڧ‬ձ͕େ޷͖Ͱ͢ʂ ⾣ ϓϩάϥϛϯάͷָ͠͞Λ఻͍͖͍͑ͯͨɻ !FT@LVNBHBJ UPNPIJSPLVNBHBJ $PEF1JFDFGPSNBD04 IUUQF[OFUKQ 9DPEFపఈղઆ

3.

ษ‫ڧ‬ձΛ։࠵͍ͯ͠·͢ɻ Θ͍Θ͍ɺָ͘͠ɺ ΈΜͳͰ‫ޠ‬Β͑Δ৔ॴΛ໨ࢦͯ͠ ԣ඿J1IPOF։ൃऀษ‫ڧ‬ձ ୈճ͸݄೔Ͱ‫ݕ‬౼த ΧδϡΞϧ4XJGUษ‫ڧ‬ձ ຊ೔։࠵ʂ͋Γ͕ͱ͏͍͟͝·͢ʂ ΈΜͳͰ4XJGU ෮शձ ୈճ໨Λ݄೔ʹ։࠵ܾఆ ZJEFW ˏԣ඿ɾഅंಓ IUUQTBUOEPSHHSPVQTZJEFW DTXJGU !ԣ඿ɾ੨༿୆ IUUQTBUOEPSHHSPVQTDTXJGU NJOOB@EF@TXJGU ˏौ୩ IUUQDTXJGUDPOOQBTTDPN

4.

NPPLNPPLSBEJP ϜοΫϜοΫϥδΦ ‫۽‬୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ಺͔Β ௌ͑ͯ͘͜Δ੠ʹࣖΛ܏ָ͚ͯ͠ΉϥδΦ ຖ݄ୈ̎ɾୈ̐ ݄༵೔ ʹ഑৴ IUUQNPPLNPPLSBEJPDPNB ⾣ ୈ࿩  ʰ഑ྻͷൣғ֎ΞΫηεʱ ⾣ ୈ࿩  ʰߏ଄ମͷৼΓฦΓʱ ⾣ ୈ࿩  ʰΩϟϓνϟʂʱ ⾣ ୈ࿩  ʰந৅ԽͬͯͳΜ͚ͩͬʱ ⾣ ୈ࿩  ʰ8FBLࢀরΛσβΠϯ͢Δʱ ⾣ ୈ࿩  ʰ‫ܕ‬ਪ࿦ͰҪ‫୺ށ‬ձٞʱ

5.

‫گۙ‬

6.

 4XJGU%BZ

7.

 ΋͘΋ࣥ͘චձ3&7

8.

IUUQTUFDICPPLNFFUVQDPOOQBTTDPN

9.

1SPUPDPM0SJFOUFE *OUFHFST

10.

 ୈճΧδϡΞϧ4XJGUษ‫ڧ‬ձʹͯ

11.

&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 1SPUPDPM0SJFOUFE'MPBUJOH1PJOUT Swift 3.0 and Later

12.

&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 1SPUPDPM0SJFOUFE'MPBUJOH1PJOUT  ϓϩτίϧͰ‫ن‬ఆ͞Εͨුಈখ਺఺਺ w *&&&‫֨ن‬Λද‫͍ͯ͠ݱ‬Δ༷ࢠ http://ieeexplore.ieee.org/servlet/opac?punumber=4610933 w ϓϩτίϧͷ‫ن‬ఆ͚ͩͰɺුಈখ਺఺਺ͱͯ͠ৼΔ෣͑Δ  ුಈখ਺఺਺‫͕ܕ‬४‫͢ڌ‬Δ w %PVCMF w 'MPBU w 'MPBU w $('MPBU

13.

&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 4XJGU 1SPUPDPM0SJFOUFE'MPBUJOH1PJOUTߏ଄ #JOBSZ'MPBUJOH1PJOU &YQSFTTJCMF#Z'MPBU-JUFSBM *&&&ͷ'MPBUJOH1PJOU #JOBSZ5ZQFʹ‫ݻ‬༗ͷఆٛ ුಈখ਺఺਺ϦςϥϧͰ ද‫ݱ‬Մೳ 'MPBUJOH1PJOU 4JHOFE/VNFSJD *&&&ͷ࠷΋‫ج‬ຊ෦෼ DMBVTF Λఏ‫͢ڙ‬Δ ූ߸෇͖਺ &YQSFTTJCMF#Z*OUFHFS-JUFSBM ੔਺ϦςϥϧͰද‫ݱ‬Մೳ )BTIBCMF /VNFSJD ϋογϡΛऔಘՄೳ ਺ 4USJEFBCMF େখൺֱ͕Մೳ $PNQBSBCMF &RVBUBCMF େখൺֱ͕Մೳ ౳Ձൺֱ͕Մೳ

14.

&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 'MPBUJOH1PJOUϓϩτίϧ֓ཁ ⾣ ුಈখ਺఺਺ͷ‫ج‬ຊੑ࣭Λද‫ݱ‬ ⾣ ੑ࣭ w ౳ՁɾେখൺֱՄೳ w ੔਺ϦςϥϧʹରԠ ⾣ ৼΔ෣͍ w ‫ج‬ຊఆ਺ͷఏ‫ڙ‬ w ߏ੒৘ใͷఏ‫ڙ‬ ৄࡉ͸ l1SPUPDPM0SJFOUFE1SPHSBNNJOH ເͱ‫࣮ݱ‬ͷ‫ؒڱ‬zΛࢀর IUUQTXXXTMJEFTIBSFOFUUPNPIJSPLVNBHBJDTXJGU

15.

&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& #JOBSZ'MPBUJOH1PJOUϓϩτίϧ֓ཁ ⾣ ‫ʹ਺ج‬ಛԽͨ͠'MPBUJOH1PJOU ⾣ ੑ࣭ w 'MPBUJOH1PJOUΛ‫ܧ‬ঝ w ුಈখ਺఺਺ϦςϥϧʹରԠ ⾣ ৼΔ෣͍ w Ϗοτૢ࡞‫ػ‬ೳͷఏ‫ڙ‬ ৄࡉ͸ l1SPUPDPM0SJFOUFE1SPHSBNNJOH ເͱ‫࣮ݱ‬ͷ‫ؒڱ‬zΛࢀর IUUQTXXXTMJEFTIBSFOFUUPNPIJSPLVNBHBJDTXJGU

16.

ϓϩτίϧΛl࣮૷z͢Δ࣌୅౸དྷʁ

17.

ͦͯ͠ഭΓ‫د‬Δ 1SPUPDPM0SJFOUFE*OUFHFSTͷ଍Իʜ ⾣ ੔਺Λੑ࣭Ͱ໌֬ʹ෼཭ ⾣ ੑ࣭ຖͷ‫ػ‬ೳΛ໌֬Խ ⾣ ‫ݻ‬ఆ௕੔਺̎ਐද‫ݱ‬੔਺ Έ͍ͨͳγϑτ͕ՄೳʹͳΔ 4&"DDFQUFE

18.

4& *NQMFNFOUFE 4XJGU

19.

1SPUPDPM0SJFOUFE*OUFHFST 4& 1SPUPDPM0SJFOUFE*OUFHFST  ੔਺ΛδΣωϦοΫϓϩάϥϛϯάͰΑΓศརʹ͢Δͷ͕ૂ͍ w *OU.BYΛհ͠ͳ͍ૢ࡞ΛՄೳʹ͢Δ w ϏοτԋࢉͳͲͷૢ࡞ΛՄೳʹ͢Δ  ੔਺ΛϓϩτίϧओମͰઆ໌͢Δ w "SJUINFUJDϓϩτίϧΛ/VNFSJDʹ໊শมߋ w 4JHOFE"SJUINFUJDϓϩτίϧΛ4JHOFE/VNFSJDʹ໊শมߋ w #JUXJTF0QFSBUJPOTϓϩτίϧΛഇࢭ w %PVCMF8JEUI5‫ܕ‬Λ௥Ճ ʢ͜ͷࢿྉͰ͸આ໌ׂѪʣ Swift 4.0 and Later

20.

1SPUPDPM0SJFOUFE*OUFHFST 4& 1SPUPDPM0SJFOUFE*OUFHFSTߏ଄ 4JHOFE*OUFHFS 6OTJHOFE*OUFHFS ූ߸෇͖੔਺ ූ߸ͳ͠੔਺ 'JYFE8JEUI*OUFHFS ‫ݻ‬ఆ෯੔਺ #JOBSZ*OUFHFS 4JHOFE/VNFSJD Ϗοτද‫͞ݱ‬Εͨ਺ ූ߸෇͖਺ $VTUPN4USJOH$POWFSUJCMF ஋ΛςΩετද‫ݱ‬Մೳ /VNFSJD )BTIBCMF &RVBUBCMF ϋογϡΛऔಘՄೳ ౳Ձൺֱ͕Մೳ ਺ &YQSFTTJCMF#Z*OUFHFS-JUFSBM 4USJEFBCMF େখൺֱ͕Մೳ $PNQBSBCMF େখൺֱ͕Մೳ ੔਺ϦςϥϧͰද‫ݱ‬Մೳ

21.

/VNFSJD

22.

1SPUPDPM0SJFOUFE*OUFHFST 4& /VNFSJDϓϩτίϧ  ਺Λද‫͢ݱ‬Δ  ੑ࣭ w ‫ૅج‬తͳ਺ͷੑ࣭Λ࣋ͭ w ౳Ձൺֱ͕Մೳ w ੔਺ϦςϥϧͰද‫ݱ‬Մೳ  ‫ػ‬ೳ w #JOBSZ*OUFHFS͔ΒͷΠϯελϯεԽ w Ճࢉɾ‫ࢉݮ‬ɾ৐ࢉ w ද‫ݱ‬ਫ਼౓Λ֬ೝͰ͖Δ

23.

1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ४‫͢ڌ‬Δϓϩτίϧ ⾣ ౳Ձൺֱ͕Մೳ ⾣ େখൺֱ·Ͱ͸‫ن‬ఆ͍ͯ͠ͳ͍༷ࢠ ߲໨ ༻్ &RVBUBCMF ౳ՁՄೳ &YQSFTTJCMF#Z*OUFHFS-JUFSBM ੔਺ϦςϥϧͰද‫ݱ‬Մೳ

24.

1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ม‫׵‬ΠχγϟϥΠβʔ ⾣ ೚ҙͷ਺஋‫͔ܕ‬Βͷ&YBDUม‫׵‬Λαϙʔτ͢Δ ⾣ ม‫׵‬ͷ੒൱ΛࣦഊՄೳΠχγϟϥΠβʔͰද‫ݱ‬ init?<T>(exactly source: T) where T : BinaryInteger

25.

1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ઈର஋ද‫ݱ‬ ⾣ ઈର஋ද‫ݱ‬ΛऔಘՄೳ ⾣ ઈର஋͸େখൺֱՄೳ͔ͭ੔਺ϦςϥϧͰද‫ݱ‬Մೳ associatedtype Magnitude : Comparable, ExpressibleByIntegerLiteral var magnitude: Magnitude { get } ˞ͳ͔ͥ“-5.magnitude”ͱ͢Δͱ%PVCMFNBHOJUVEF͕‫ݺ‬͹ΕΔʁ

26.

1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ࢉज़ԋࢉ ⾣ Ճࢉɾ‫ࢉݮ‬ɾ৐ࢉΛαϙʔτ ⾣ আࢉ͸αϙʔτ͞Εͳ͍ʢ#JOBSZ*OUFHFSͰαϙʔτ͞ΕΔ༷ࢠʣ ߲໨ ༻్ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG Ճࢉ TUBUJDGVOD  MITJOPVU4FMG SIT4FMG Ճࢉͯࠩ͠͠ସ͑ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ‫ࢉݮ‬ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ‫ࠩͯ͠͠ࢉݮ‬ସ͑ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ৐ࢉ TUBUJDGVOD  MITJOPVU4FMG SIT4FMG ৐ࢉͯࠩ͠͠ସ͑

27.

1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ༻్ෆ໌ ⾣ ίϝϯτͰͷઆ໌͕ͳ͍‫ػ‬ೳ ⾣ ‫ط‬ఆͷ࣮૷Ͱ͸ɺ஋Λͦͷ··ฦ͢ prefix static func +(x: Self) -> Self { return x } ˞ූ߸ͷ֓೦͕ͳ͍ϓϩτίϧͰɺͲ͏͍͏ҙຯΛ࣋ͭͷͩΖ͏ʁ

28.

4JHOFE/VNFSJD

29.

1SPUPDPM0SJFOUFE*OUFHFST 4& 4JHOFE/VNFSJDϓϩτίϧ  ූ߸෇͖਺Λද‫͢ݱ‬Δ  ੑ࣭ w /VNFSJDΛ‫ܧ‬ঝ w ූ߸ɺͱΓΘ͚ෛͷද‫ݱ‬Λ࣋ͭ  ‫ػ‬ೳ௥Ճ w ූ߸Λ൓సͰ͖Δ

30.

1SPUPDPM0SJFOUFE*OUFHFSTr4JHOFE/VNFSJD ූ߸൓స ⾣ ϝιουͰɺࣗ਎ͷ஋Λ൓సͰ͖Δ ⾣ ԋࢉࢠͰɺࣗ਎ͷ஋Λ൓సͨ͠஋ΛฦͤΔ ߲໨ ༻్ QSFpYTUBUJDGVOD PQFSBOE4FMG 4FMG ‫ط‬ఆͰ͸ɺ಺෦ͰOFHBUFͨ͠஋Λฦ٫ NVUBUJOHGVODOFHBUF ‫ط‬ఆͰ͸ɺࣗ਎Λ͔ΒҾ͍ͯࠩ͠ସ͑

31.

1SPUPDPM0SJFOUFE*OUFHFSTr4JHOFE/VNFSJD ઈର஋ ⾣ ઈର஋ΛऔಘͰ͖Δ ⾣ ̎छྨͷऔಘํ๏͕࣮૷͞Ε͍ͯΔ // 対象の型で、自身の型とその内部の絶対値表現の型とが同じだった場合 func abs<T>(_ x: T) -> T where T : SignedNumeric, T == T.Magnitude // 対象の型が、比較可能な符号付き整数だった場合 func abs<T>(_ x: T) -> T where T : Comparable, T : SignedNumeric

32.

#JOBSZ*OUFHFS

33.

1SPUPDPM0SJFOUFE*OUFHFST 4& #JOBSZ*OUFHFSϓϩτίϧ  όΠφϦʔͰද‫͞ݱ‬Εͨ੔਺Λද‫͢ݱ‬Δ w ඪ४ϥΠϒϥϦʔͷ͢΂ͯͷ੔਺‫͕͜ܕ‬Εʹ֘౰  ੑ࣭ w /VNFSJDΛ‫ܧ‬ঝ w ଞͷ੔਺‫ܕ‬΍ුಈখ਺఺਺‫͔ܕ‬Βม‫׵‬Մೳ  ‫ػ‬ೳ௥Ճ w ֤छม‫׵‬ΠχγϟϥΠβʔΛ౥ࡌ w ৐ࢉΛαϙʔτ

34.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ූ߸ද‫ݱ‬ ⾣ ූ߸ද‫͕ݱ‬Մೳ͔Ͳ͏͔Λ൑ఆͰ͖Δ ⾣ JT4JHOFE͸ϓϩτίϧ͚ͩͰ‫͍ͨ݁͠׬‬Α͏ͳ‫͕͢ؾ‬Δ ߲໨ ༻్ TUBUJDWBSJT4JHOFE#PPM\HFU^ ූ߸ද‫͖Ͱݱ‬Δ‫ͳܕ‬ΒUSVFΛฦ͢ GVODTJHOVN 4FMG ஋͕ਖ਼ͳΒɺෛͳΒɺͦΕҎ֎ͳΒ

35.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ੔਺‫͔ܕ‬Βͷม‫׵‬ ⾣ ೚ҙͷ੔਺‫͔ܕ‬Βͷม‫׵‬Λαϙʔτ͢Δ ⾣ શ෯ม‫׵‬ɺϏοτύλʔϯɺΫϥϯϐϯάΛαϙʔτ // 任意の整数型からの全幅変換 init<T>(_ source: T) where T : BinaryInteger // ビットパターンを使った内部表現そのままの変換 init<T>(extendingOrTruncating source: T) where T : BinaryInteger // 強制的に範囲内に収める変換 init<T>(clamping source: T) where T : BinaryInteger

36.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ුಈখ਺఺਺͔Βͷม‫׵‬ ⾣ ුಈখ਺఺਺‫͔ܕ‬Βͷม‫׵‬Λαϙʔτ͢Δ ⾣ ஋Λ‫ؙ‬ΊΔม‫&ͱ׵‬YBDUม‫׵‬Λఏ‫͢ڙ‬Δ // 浮動小数点数型からの丸め変換(0 方向へ丸める) init<T>(_ source: T) where T : FloatingPoint // 浮動小数点数型からの Exact 変換(値を丸めない) init?<T>(exactly source: T) where T : FloatingPoint

37.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ‫ط‬ఆͷΠχγϟϥΠβʔ ⾣ Ҿ਺ΛऔΒͳ͍ΠχγϟϥΠβʔ͕࣮૷͞Ε͍ͯΔ ⾣ ϓϩτίϧ֦ு͚ͩͰɺએ‫͞ݴ‬Ε͍ͯͳ͍ // 0 をインスタンス化するイニシャライザー init() { self = 0 }

38.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS 803%σʔλ ⾣ ̎ͷิ਺ද‫Ͱݱ‬8PSEαΠζʹ෼཭ͨ͠஋ΛऔಘՄೳ ⾣ 8PSET͸4XJGUඪ४ϥΠϒϥϦʔͰ͸"SSBZ6*OU‫ܕ‬ʁ associatedtype Words var words: Words { get } // WORD 表現したときの WORD 数を取得 var countRepresentedWords: Int { get } ˞࣮૷͸lͱΓ͋͑ͣ⁋᧒Λ߹Θ͍ͤͯΔzΑ͏ʹ‫͑ݟ‬Δʢ‫ޙ‬ड़ʣ

39.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ϏοταΠζ ⾣ ஋ͷϏοτ਺ΛऔಘͰ͖Δ ⾣ ຤ඌ͔ΒԿϏοτ͕Ͱ͋Δ͔΋औಘՄೳ ߲໨ ༻్ WBSCJU8JEUI*OU\HFU^ σʔλͷද‫ݱ‬αΠζΛऔಘʢՄม௕Λߟྀʁʣ WBSUSBJMJOH;FSP#JU$PVOU*OU\HFU^ ࠷ԼҐ͔Β͕࿈ଓͯ͠ొ৔͢Δ‫਺ݸ‬Λऔಘ

40.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ࢉज़ԋࢉ ⾣ আࢉɾ৒༨Λαϙʔτ ⾣ Ճࢉɾ‫ࢉݮ‬ɾ৐ࢉ͸/VNFSJDͱಉ͡΋ͷ͕એ‫͞ݴ‬ΕΔ ߲໨ ༻్ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG আࢉ TUBUJDGVOD MITJOPVU4FMG SIT4FMG আࢉͯࠩ͠͠ସ͑ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ৒༨ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ৒༨Λ‫ࠩͯ͠͠ࢉܭ‬ସ͑ GVODRVPUJFOU"OE3FNBJOEFS EJWJEJOH#ZSIT4FMG       RVPUJFOU4FMG SFNBJOEFS4FMG ঎ͱ༨ΓΛऔಘ ˞/VNFSJDΛ'MPBUJOH1PJOUͱ‫ڞ‬༗͢ΔͨΊʹআࢉΛ෼཭ͨ͠Β͍͠

41.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ‫ʹ཭ڑ‬ΑΔԋࢉ ⾣ ‫ʹ཭ڑ‬ΑΔҠಈ͕Մೳʢ4USJEFBCMFϓϩτίϧͷ௨Γʣ ⾣ ‫཭ڑ‬͸*OU‫Ͱܕ‬ද‫͢ݱ‬Δ ߲໨ ༻్ GVODBEWBODFE CZO*OU 4FMG ࢦఆͨ͠‫͚ͩ཭ڑ‬Ҡಈͨ͠஋Λऔಘ GVODEJTUBODF UPPUIFS4FMG *OU ΋͏ͻͱͭͷ஋ͱͷ‫཭ڑ‬Λऔಘ

42.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS Ϗοτԋࢉ ⾣ ϏοτԋࢉΛαϙʔτ ⾣ /05 "/% 03 903 ߲໨ ༻్ QSFpYTUBUJDGVODd Y4FMG 4FMG /05ԋࢉ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG "/%ԋࢉ TUBUJDGVOD MITJOPVU4FMG SIT4FMG "/%ԋࢉͯࠩ͠͠ସ͑ TUBUJDGVODc MIT4FMG SIT4FMG 4FMG 03ԋࢉ TUBUJDGVODc MITJOPVU4FMG SIT4FMG 03ԋࢉͯࠩ͠͠ସ͑ TUBUJDGVOD? MIT4FMG SIT4FMG 4FMG 903ԋࢉ TUBUJDGVOD? MITJOPVU4FMG SIT4FMG 903ԋࢉͯࠩ͠͠ସ͑

43.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS Ϗοτγϑτ ⾣ ϏοτγϑτΛαϙʔτ ⾣ ϚΠφεͷ஋Λ࢖͏ͱɺ‫΁޲ํٯ‬γϑτ͢Δ ߲໨ ༻్ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ӈγϑτ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ӈγϑτͯࠩ͠͠ସ͑ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ࠨγϑτ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ࠨγϑτͯࠩ͠͠ସ͑

44.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS Ϗοτγϑτʢ೚ҙͷ‫ܕ‬ʣ ⾣ γϑτ਺Λɺର৅ͷ‫ͱܕ‬͸ҧ͏‫Ͱܕ‬΋ࢦఆͰ͖Δ ⾣ ϚΠφεͷ஋Λ࢖͏ͱɺ‫΁޲ํٯ‬γϑτ͢Δ static func &>> <Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger static func &>>= <Other>(lhs: inout Self, rhs: Other) where Other : BinaryInteger static func &<< <Other>(lhs: Self, rhs: Other) -> Self where Other : BinaryInteger static func &<<= <Other>(lhs: inout Self, rhs: Other) where Other : BinaryInteger

45.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ҟͳΔ‫ܕ‬ಉ࢜ͷൺֱԋࢉʢϓϩτίϧ֦ுʣ ⾣ #JOBSZ*OUFHFSʹ४‫͢ڌ‬Δ‫ܕ‬ಉ࢜ͰൺֱՄೳ ⾣ ԋࢉ͸ҟͳΔ‫ܕ‬ಉ࢜Ͱ͸ߦ͑ͳ͍ TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS TUBUJDGVOD0UIFS MIT4FMG SIT0UIFS #PPMXIFSF0UIFS#JOBSZ*OUFHFS ∳ӔӵྞൺၯӑǑᤏ㉊ӕǒᲦ㆜ẛ☑Ҷ൧⥎ MFUWBT6*OU MFUWBT*OU WWUSVF

46.

1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS XPSETͷෆࢥٞͲ͜Ζ ⾣ 8PSET͸ؔ࿈‫Ͱܕ‬ఆٛ͞ΕΔ͕ɺϓϩτίϧ֦ுͰܾΊଧ࣮ͪ૷ ⾣ Ӆ͠ϝιου@XPSE BU ͰXPSETΛ࣮‫͍ͯ͠ݱ‬Δ༷ࢠ var words: [UInt] { var result = [UInt]() result.reserveCapacity(countRepresentedWords) for i in 0 ..< countRepresentedWords { result.append(_word(at: i)) } return result }

47.

6OTJHOFE*OUFHFS

48.

1SPUPDPM0SJFOUFE*OUFHFST 4& 6OTJHOFE*OUFHFSϓϩτίϧ  ූ߸ͳ͠੔਺Λද‫͢ݱ‬Δ  ੑ࣭ w #JOBSZ*OUFHFSΛ‫ܧ‬ঝ w ઈର஋ද‫ݱ‬΋ԿΒ͔ͷ#JOBSZ*OUFHFSͰߦ͏  ‫ػ‬ೳ௥Ճ w ࠷େ஋ͱ࠷খ஋ΛऔಘՄೳ

49.

1SPUPDPM0SJFOUFE*OUFHFSTr6OTJHOFE*OUFHFS ‫ʹ཭ڑ‬ΑΔԋࢉ ⾣ ࠷େ஋ͱ࠷খ஋ΛऔಘͰ͖Δ ⾣ CJU8JEUI ࠷େ஋͸  ߲໨ ༻్ TUBUJDWBSNBY4FMG\HFU^ ࠷େ஋Λऔಘ TUBUJDWBSNJO4FMG\HFU^ ࠷খ஋Λऔಘ

50.

4JHOFE*OUFHFS

51.

1SPUPDPM0SJFOUFE*OUFHFST 4& 4JHOFE*OUFHFSϓϩτίϧ  ූ߸෇͖੔਺Λද‫͢ݱ‬Δ  ੑ࣭ w #JOBSZ*OUFHFSΛ‫ܧ‬ঝ w 4JHOFE/VNFSJDΛ‫ܧ‬ঝ w ઈର஋ද‫ݱ‬΋ԿΒ͔ͷ#JOBSZ*OUFHFS  ‫ػ‬ೳ௥Ճ w ࠷େ஋ͱ࠷খ஋ΛऔಘՄೳ

52.

1SPUPDPM0SJFOUFE*OUFHFSTr4JHOFE*OUFHFS ‫ʹ཭ڑ‬ΑΔԋࢉ ⾣ ࠷େ஋ͱ࠷খ஋ΛऔಘͰ͖Δ ⾣ ࠷େ஋͸ CJU8JEUI ɺ࠷খ஋͸  CJU8JEUI ߲໨ ༻్ TUBUJDWBSNBY4FMG\HFU^ ࠷େ஋Λऔಘ TUBUJDWBSNJO4FMG\HFU^ ࠷খ஋Λऔಘ

53.

'JYFE8JEUI*OUFHFS

54.

1SPUPDPM0SJFOUFE*OUFHFST 4& 'JYFE8JEUI*OUFHFSϓϩτίϧ  ‫ݻ‬ఆ௕੔਺Λද‫͢ݱ‬Δ w ඪ४ϥΠϒϥϦʔͷ͢΂ͯͷ੔਺‫͕͜ܕ‬Εʹ֘౰  ੑ࣭ w #JOBSZ*OUFHFSΛ‫ܧ‬ঝ w όΠτংྻΛߟྀ͢Δ  ‫ػ‬ೳ௥Ճ w ࠷େ஋ͱ࠷খ஋ΛऔಘͰ͖Δ w ΦʔόʔϑϩʔΛՃຯͨ͠ԋࢉΛఏ‫ڙ‬ w ΤϯίʔυɾσίʔυΛఏ‫͢ڙ‬Δ

55.

1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS όΠτংྻΛߟྀͨ͠ม‫׵‬ ⾣ ॳ‫ظ‬ԽͰ࢖͏஋ΛόΠτংྻΛߟྀͯ͠ड͚ೖΕΔ ⾣ όΠτংྻΛ֬ೝ͢Δ‫ػ‬ೳ΋༻ҙ͞Ε͍ͯΔ init(bigEndian value: Int) init(littleEndian value: Int) // 内部データを序列を加味して解釈する var bigEndian: Int { get } var littleEndian: Int { get } // 内部データの序列を交換して解釈する var byteSwapped: Int { get }

56.

1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS ϙΠϯλʔ͕ࢦ͢σʔλ͔Βͷม‫׵‬ ⾣ ϙΠϯλʔͰࣔͨ͠৔ॴͷσʔλ͔Βม‫͖Ͱ׵‬Δ ⾣ Ϗοτύλʔϯ΍ΞʔΧΠϒ͔Βੜ੒Մೳ // ビットパターンからの変換(nil の場合は 0 で初期化される様子) init(bitPattern pointer: OpaquePointer?) // デコーダーからの変換(使用方法は未確認) init(from decoder: Decoder) throws // エンコード機能もある様子(使用方法は未確認) func encode(to encoder: Encoder) throws

57.

1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS ࢉज़ԋࢉϝιου ⾣ ࢛ଇԋࢉΛαϙʔτ ⾣ Φʔόʔϑϩʔ͔ͨ͠ΛλϓϧͰฦ٫ GVODBEEJOH3FQPSUJOH0WFSGMPX @SIT4FMG         QBSUJBM7BMVF4FMG PWFSGMPX"SJUINFUJD0WFSGMPX  GVODTVCUSBDUJOH3FQPSUJOH0WFSGMPX @SIT4FMG         QBSUJBM7BMVF4FMG PWFSGMPX"SJUINFUJD0WFSGMPX  GVODNVMUJQMJFE3FQPSUJOH0WFSGMPX CZSIT4FMG         QBSUJBM7BMVF4FMG PWFSGMPX"SJUINFUJD0WFSGMPX  GVODEJWJEFE3FQPSUJOH0WFSGMPX CZSIT4FMG         QBSUJBM7BMVF4FMG PWFSGMPX"SJUINFUJD0WFSGMPX  GVODSFNBJOEFS3FQPSUJOH0WFSGMPX EJWJEJOH#ZSIT4FMG         QBSUJBM7BMVF4FMG PWFSGMPX"SJUINFUJD0WFSGMPX

58.

1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS શ෯ԋࢉ ⾣ ද‫ݱ‬෯Λ௒͑Δ৐ࢉΛߦ͑Δ ⾣ ݁Ռ͸λϓϧͰฦ٫͞ΕΔ func multipliedFullWidth(by other: Int) -> (high: Int, low: Int.Magnitude) func dividingFullWidth(_ dividend: (high: Int, low: Int.Magnitude)) -> (quotient: Int, remainder: Int)

59.

&OKPZ4XJGU 5IBOLZPV 1SPUPDPM0SJFOUFE*OUFHFST ‫۽‬୩༑޺ IUUQF[OFUKQ ⾣ &OIBODFE'MPBUJOH1PJOU1SPUPDPMT ⾣ /VNFSJD ⾣ 4JHOFE/VNFSJD ⾣ #JOBSZ*OUFHFS ⾣ 6OTJHOFE*OUFHFS ⾣ 4JHOFE*OUFHFS ⾣ 'JYFE8JEUI*OUFHFS