164 Views
June 12, 17
スライド概要
Swift 4 から導入される Protocol Oriented Integers の概要を整理してみた資料です。ここで紹介したもの以外にも詳細な機能があったりするので、それは不足するものの、プロトコル指向整数で何ができるのかを感じ取ってもらえる資料になってるかなって思います。2017/06/03 のカジュアル Swift 勉強会で発表しました。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 1,850 でした。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
1SPUPDPM0SJFOUFE *OUFHFST 4& ۽୩༑ IUUQF[OFUKQ !ΧδϡΞϧ4XJGUษڧձ 5SVOL%FWFMPQNFOU+VOF
۽୩༑ 5PNPIJSP,VNBHBJ ⾣ 4XJGU͕ޠݴେ͖Ͱ͢ʂ ⾣ ΈΜͳͰָ͠Ήษڧձ͕େ͖Ͱ͢ʂ ⾣ ϓϩάϥϛϯάͷָ͠͞Λ͍͖͍͑ͯͨɻ !FT@LVNBHBJ UPNPIJSPLVNBHBJ $PEF1JFDFGPSNBD04 IUUQF[OFUKQ 9DPEFపఈղઆ
ษڧձΛ։࠵͍ͯ͠·͢ɻ Θ͍Θ͍ɺָ͘͠ɺ ΈΜͳͰޠΒ͑ΔॴΛࢦͯ͠ ԣJ1IPOF։ൃऀษڧձ ୈճ݄Ͱݕ౼த ΧδϡΞϧ4XJGUษڧձ ຊ։࠵ʂ͋Γ͕ͱ͏͍͟͝·͢ʂ ΈΜͳͰ4XJGU ෮शձ ୈճΛ݄ʹ։࠵ܾఆ ZJEFW ˏԣɾഅंಓ IUUQTBUOEPSHHSPVQTZJEFW DTXJGU !ԣɾ੨༿ IUUQTBUOEPSHHSPVQTDTXJGU NJOOB@EF@TXJGU ˏौ୩ IUUQDTXJGUDPOOQBTTDPN
NPPLNPPLSBEJP ϜοΫϜοΫϥδΦ ۽୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ͔Β ௌ͑ͯ͘͜ΔʹࣖΛָ͚ͯ͠ΉϥδΦ ຖ݄ୈ̎ɾୈ̐ ݄༵ ʹ৴ IUUQNPPLNPPLSBEJPDPNB ⾣ ୈ ʰྻͷൣғ֎ΞΫηεʱ ⾣ ୈ ʰߏମͷৼΓฦΓʱ ⾣ ୈ ʰΩϟϓνϟʂʱ ⾣ ୈ ʰநԽͬͯͳΜ͚ͩͬʱ ⾣ ୈ ʰ8FBLࢀরΛσβΠϯ͢Δʱ ⾣ ୈ ʰܕਪͰҪށձٞʱ
گۙ
4XJGU%BZ
ࣥ͘͘චձ3&7
IUUQTUFDICPPLNFFUVQDPOOQBTTDPN
1SPUPDPM0SJFOUFE *OUFHFST
ୈճΧδϡΞϧ4XJGUษڧձʹͯ
&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 1SPUPDPM0SJFOUFE'MPBUJOH1PJOUT Swift 3.0 and Later
&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 1SPUPDPM0SJFOUFE'MPBUJOH1PJOUT ϓϩτίϧͰنఆ͞Εͨුಈখ w *&&&֨نΛද͍ͯ͠ݱΔ༷ࢠ http://ieeexplore.ieee.org/servlet/opac?punumber=4610933 w ϓϩτίϧͷنఆ͚ͩͰɺුಈখͱͯ͠ৼΔ͑Δ ුಈখ͕ܕ४͢ڌΔ w %PVCMF w 'MPBU w 'MPBU w $('MPBU
&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 େখൺֱ͕Մೳ Ձൺֱ͕Մೳ
&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& 'MPBUJOH1PJOUϓϩτίϧ֓ཁ ⾣ ුಈখͷجຊੑ࣭Λදݱ ⾣ ੑ࣭ w ՁɾେখൺֱՄೳ w ϦςϥϧʹରԠ ⾣ ৼΔ͍ w جຊఆͷఏڙ w ߏใͷఏڙ ৄࡉ l1SPUPDPM0SJFOUFE1SPHSBNNJOH ເͱ࣮ݱͷؒڱzΛࢀর IUUQTXXXTMJEFTIBSFOFUUPNPIJSPLVNBHBJDTXJGU
&OIBODFE'MPBUJOH1PJOU1SPUPDPMT 4& #JOBSZ'MPBUJOH1PJOUϓϩτίϧ֓ཁ ⾣ ʹجಛԽͨ͠'MPBUJOH1PJOU ⾣ ੑ࣭ w 'MPBUJOH1PJOUΛܧঝ w ුಈখϦςϥϧʹରԠ ⾣ ৼΔ͍ w Ϗοτૢ࡞ػೳͷఏڙ ৄࡉ l1SPUPDPM0SJFOUFE1SPHSBNNJOH ເͱ࣮ݱͷؒڱzΛࢀর IUUQTXXXTMJEFTIBSFOFUUPNPIJSPLVNBHBJDTXJGU
ϓϩτίϧΛl࣮z͢Δ࣌౸དྷʁ
ͦͯ͠ഭΓدΔ 1SPUPDPM0SJFOUFE*OUFHFSTͷԻʜ ⾣ Λੑ࣭Ͱ໌֬ʹ ⾣ ੑ࣭ຖͷػೳΛ໌֬Խ ⾣ ݻఆ̎ਐදݱ Έ͍ͨͳγϑτ͕ՄೳʹͳΔ 4&"DDFQUFE
4& *NQMFNFOUFE 4XJGU
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
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 େখൺֱ͕Մೳ ϦςϥϧͰදݱՄೳ
/VNFSJD
1SPUPDPM0SJFOUFE*OUFHFST 4& /VNFSJDϓϩτίϧ Λද͢ݱΔ ੑ࣭ w ૅجతͳͷੑ࣭Λ࣋ͭ w Ձൺֱ͕Մೳ w ϦςϥϧͰදݱՄೳ ػೳ w #JOBSZ*OUFHFS͔ΒͷΠϯελϯεԽ w Ճࢉɾࢉݮɾࢉ w දݱਫ਼Λ֬ೝͰ͖Δ
1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ४͢ڌΔϓϩτίϧ ⾣ Ձൺֱ͕Մೳ ⾣ େখൺֱ·Ͱنఆ͍ͯ͠ͳ͍༷ࢠ ߲ ༻్ &RVBUBCMF ՁՄೳ &YQSFTTJCMF#Z*OUFHFS-JUFSBM ϦςϥϧͰදݱՄೳ
1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD มΠχγϟϥΠβʔ ⾣ ҙͷ͔ܕΒͷ&YBDUมΛαϙʔτ͢Δ ⾣ มͷ൱ΛࣦഊՄೳΠχγϟϥΠβʔͰදݱ init?<T>(exactly source: T) where T : BinaryInteger
1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ઈରදݱ ⾣ ઈରදݱΛऔಘՄೳ ⾣ ઈରେখൺֱՄೳ͔ͭϦςϥϧͰදݱՄೳ associatedtype Magnitude : Comparable, ExpressibleByIntegerLiteral var magnitude: Magnitude { get } ˞ͳ͔ͥ“-5.magnitude”ͱ͢Δͱ%PVCMFNBHOJUVEF͕ݺΕΔʁ
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 ࢉͯࠩ͠͠ସ͑
1SPUPDPM0SJFOUFE*OUFHFSTr/VNFSJD ༻్ෆ໌ ⾣ ίϝϯτͰͷઆ໌͕ͳ͍ػೳ ⾣ طఆͷ࣮ͰɺΛͦͷ··ฦ͢ prefix static func +(x: Self) -> Self { return x } ˞ූ߸ͷ֓೦͕ͳ͍ϓϩτίϧͰɺͲ͏͍͏ҙຯΛ࣋ͭͷͩΖ͏ʁ
4JHOFE/VNFSJD
1SPUPDPM0SJFOUFE*OUFHFST 4& 4JHOFE/VNFSJDϓϩτίϧ ූ߸͖Λද͢ݱΔ ੑ࣭ w /VNFSJDΛܧঝ w ූ߸ɺͱΓΘ͚ෛͷදݱΛ࣋ͭ ػೳՃ w ූ߸ΛసͰ͖Δ
1SPUPDPM0SJFOUFE*OUFHFSTr4JHOFE/VNFSJD ූ߸స ⾣ ϝιουͰɺࣗͷΛసͰ͖Δ ⾣ ԋࢉࢠͰɺࣗͷΛసͨ͠ΛฦͤΔ ߲ ༻్ QSFpYTUBUJDGVOD PQFSBOE4FMG 4FMG طఆͰɺ෦ͰOFHBUFͨ͠Λฦ٫ NVUBUJOHGVODOFHBUF طఆͰɺࣗΛ͔ΒҾ͍ͯࠩ͠ସ͑
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
#JOBSZ*OUFHFS
1SPUPDPM0SJFOUFE*OUFHFST 4& #JOBSZ*OUFHFSϓϩτίϧ όΠφϦʔͰද͞ݱΕͨΛද͢ݱΔ w ඪ४ϥΠϒϥϦʔͷͯ͢ͷ͕͜ܕΕʹ֘ ੑ࣭ w /VNFSJDΛܧঝ w ଞͷܕුಈখ͔ܕΒมՄೳ ػೳՃ w ֤छมΠχγϟϥΠβʔΛࡌ w ࢉΛαϙʔτ
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ූ߸දݱ ⾣ ූ߸ද͕ݱՄೳ͔Ͳ͏͔ΛఆͰ͖Δ ⾣ JT4JHOFEϓϩτίϧ͚ͩͰ͍ͨ݁͠Α͏ͳ͕͢ؾΔ ߲ ༻్ TUBUJDWBSJT4JHOFE#PPM\HFU^ ූ߸ද͖ͰݱΔͳܕΒUSVFΛฦ͢ GVODTJHOVN 4FMG ͕ਖ਼ͳΒɺෛͳΒɺͦΕҎ֎ͳΒ
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
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ුಈখ͔Βͷม ⾣ ුಈখ͔ܕΒͷมΛαϙʔτ͢Δ ⾣ ΛؙΊΔม&ͱYBDUมΛఏ͢ڙΔ // 浮動小数点数型からの丸め変換(0 方向へ丸める) init<T>(_ source: T) where T : FloatingPoint // 浮動小数点数型からの Exact 変換(値を丸めない) init?<T>(exactly source: T) where T : FloatingPoint
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS طఆͷΠχγϟϥΠβʔ ⾣ ҾΛऔΒͳ͍ΠχγϟϥΠβʔ͕࣮͞Ε͍ͯΔ ⾣ ϓϩτίϧ֦ு͚ͩͰɺએ͞ݴΕ͍ͯͳ͍ // 0 をインスタンス化するイニシャライザー init() { self = 0 }
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS 803%σʔλ ⾣ ̎ͷิදͰݱ8PSEαΠζʹͨ͠ΛऔಘՄೳ ⾣ 8PSET4XJGUඪ४ϥΠϒϥϦʔͰ"SSBZ6*OUܕʁ associatedtype Words var words: Words { get } // WORD 表現したときの WORD 数を取得 var countRepresentedWords: Int { get } ˞࣮lͱΓ͋͑ͣ⁋᧒Λ߹Θ͍ͤͯΔzΑ͏ʹ͑ݟΔʢޙड़ʣ
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ϏοταΠζ ⾣ ͷϏοτΛऔಘͰ͖Δ ⾣ ඌ͔ΒԿϏοτ͕Ͱ͋Δ͔औಘՄೳ ߲ ༻్ WBSCJU8JEUI*OU\HFU^ σʔλͷදݱαΠζΛऔಘʢՄมΛߟྀʁʣ WBSUSBJMJOH;FSP#JU$PVOU*OU\HFU^ ࠷ԼҐ͔Β͕࿈ଓͯ͠ొ͢ΔݸΛऔಘ
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ͱڞ༗͢ΔͨΊʹআࢉΛͨ͠Β͍͠
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS ʹڑΑΔԋࢉ ⾣ ʹڑΑΔҠಈ͕Մೳʢ4USJEFBCMFϓϩτίϧͷ௨Γʣ ⾣ ڑ*OUͰܕද͢ݱΔ ߲ ༻్ GVODBEWBODFE CZO*OU 4FMG ࢦఆ͚ͨͩ͠ڑҠಈͨ͠Λऔಘ GVODEJTUBODF UPPUIFS4FMG *OU ͏ͻͱͭͷͱͷڑΛऔಘ
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ԋࢉͯࠩ͠͠ସ͑
1SPUPDPM0SJFOUFE*OUFHFSTr#JOBSZ*OUFHFS Ϗοτγϑτ ⾣ ϏοτγϑτΛαϙʔτ ⾣ ϚΠφεͷΛ͏ͱɺํٯγϑτ͢Δ ߲ ༻్ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ӈγϑτ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ӈγϑτͯࠩ͠͠ସ͑ TUBUJDGVOD MIT4FMG SIT4FMG 4FMG ࠨγϑτ TUBUJDGVOD MITJOPVU4FMG SIT4FMG ࠨγϑτͯࠩ͠͠ସ͑
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
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
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 }
6OTJHOFE*OUFHFS
1SPUPDPM0SJFOUFE*OUFHFST 4& 6OTJHOFE*OUFHFSϓϩτίϧ ූ߸ͳ͠Λද͢ݱΔ ੑ࣭ w #JOBSZ*OUFHFSΛܧঝ w ઈରදݱԿΒ͔ͷ#JOBSZ*OUFHFSͰߦ͏ ػೳՃ w ࠷େͱ࠷খΛऔಘՄೳ
1SPUPDPM0SJFOUFE*OUFHFSTr6OTJHOFE*OUFHFS ʹڑΑΔԋࢉ ⾣ ࠷େͱ࠷খΛऔಘͰ͖Δ ⾣ CJU8JEUI ࠷େ ߲ ༻్ TUBUJDWBSNBY4FMG\HFU^ ࠷େΛऔಘ TUBUJDWBSNJO4FMG\HFU^ ࠷খΛऔಘ
4JHOFE*OUFHFS
1SPUPDPM0SJFOUFE*OUFHFST 4& 4JHOFE*OUFHFSϓϩτίϧ ූ߸͖Λද͢ݱΔ ੑ࣭ w #JOBSZ*OUFHFSΛܧঝ w 4JHOFE/VNFSJDΛܧঝ w ઈରදݱԿΒ͔ͷ#JOBSZ*OUFHFS ػೳՃ w ࠷େͱ࠷খΛऔಘՄೳ
1SPUPDPM0SJFOUFE*OUFHFSTr4JHOFE*OUFHFS ʹڑΑΔԋࢉ ⾣ ࠷େͱ࠷খΛऔಘͰ͖Δ ⾣ ࠷େ CJU8JEUI ɺ࠷খ CJU8JEUI ߲ ༻్ TUBUJDWBSNBY4FMG\HFU^ ࠷େΛऔಘ TUBUJDWBSNJO4FMG\HFU^ ࠷খΛऔಘ
'JYFE8JEUI*OUFHFS
1SPUPDPM0SJFOUFE*OUFHFST 4& 'JYFE8JEUI*OUFHFSϓϩτίϧ ݻఆΛද͢ݱΔ w ඪ४ϥΠϒϥϦʔͷͯ͢ͷ͕͜ܕΕʹ֘ ੑ࣭ w #JOBSZ*OUFHFSΛܧঝ w όΠτংྻΛߟྀ͢Δ ػೳՃ w ࠷େͱ࠷খΛऔಘͰ͖Δ w ΦʔόʔϑϩʔΛՃຯͨ͠ԋࢉΛఏڙ w ΤϯίʔυɾσίʔυΛఏ͢ڙΔ
1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS όΠτংྻΛߟྀͨ͠ม ⾣ ॳظԽͰ͏ΛόΠτংྻΛߟྀͯ͠ड͚ೖΕΔ ⾣ όΠτংྻΛ֬ೝ͢Δػೳ༻ҙ͞Ε͍ͯΔ init(bigEndian value: Int) init(littleEndian value: Int) // 内部データを序列を加味して解釈する var bigEndian: Int { get } var littleEndian: Int { get } // 内部データの序列を交換して解釈する var byteSwapped: Int { get }
1SPUPDPM0SJFOUFE*OUFHFSTr'JYFE8JEUI*OUFHFS ϙΠϯλʔ͕ࢦ͢σʔλ͔Βͷม ⾣ ϙΠϯλʔͰࣔͨ͠ॴͷσʔλ͔Βม͖ͰΔ ⾣ ϏοτύλʔϯΞʔΧΠϒ͔ΒੜՄೳ // ビットパターンからの変換(nil の場合は 0 で初期化される様子) init(bitPattern pointer: OpaquePointer?) // デコーダーからの変換(使用方法は未確認) init(from decoder: Decoder) throws // エンコード機能もある様子(使用方法は未確認) func encode(to encoder: Encoder) throws
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
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)
&OKPZ4XJGU 5IBOLZPV 1SPUPDPM0SJFOUFE*OUFHFST ۽୩༑ IUUQF[OFUKQ ⾣ &OIBODFE'MPBUJOH1PJOU1SPUPDPMT ⾣ /VNFSJD ⾣ 4JHOFE/VNFSJD ⾣ #JOBSZ*OUFHFS ⾣ 6OTJHOFE*OUFHFS ⾣ 4JHOFE*OUFHFS ⾣ 'JYFE8JEUI*OUFHFS