NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile

>100 Views

October 01, 16

スライド概要

Swift 3 で NS Prefix が消去されたことについて、ざっくり広めに LT してきました。単純に消えるだけじゃない大きな変化、調べててなかなか面白かったです。

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

2016/10/01 第一回スタートアップiOS/Android勉強会 での発表資料です。

profile-image

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

シェア

またはPlayer版

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

ダウンロード

関連スライド

各ページのテキスト
1.

/41SFGJY ͔ͦ͜Β‫͢౉ݟ‬4XJGUͷ‫ܠ‬৭ ୈҰճελʔτΞοϓJ04"OESPJEษ‫ڧ‬ձ PO &;/&5‫۽‬୩༑޺ IUUQF[OFUKQ 4XJGU 

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 ⾣ ୈ̐࿩ ʢ݄೔ʹ഑৴༧ఆʣ ⾣ ୈ̏࿩ ʰίϝϯτʱ ⾣ ୈ̎࿩ ʰྻ‫ܕڍ‬ʱ ⾣ ୈ̍࿩ ʰϓϩάϥϛϯάͱࢲͨͪʱ 

5.

/41SFGJY 

6.

/41SFpYͱ͸ʁ ‫͖࣌ྑ͖ݹ‬୅ͷҨ࢈ ⾣ 0CKFDUJWF$ͷ࣌୅ͷ໊લۭؒ ⾣ Ϋϥε໊ʹจࣈҎ্Ͱ઀಄ࣙΛ෇༩ ⾣ ଞͷਓ͕࡞ͬͨΫϥεͱͷ໊લͷিಥΛճආ // こちらは Foundation の Date 型 /4%BUF // こちらは自分の Date 型 &4,%BUF 

7.

4XJGU.PEVMF 

8.

4XJGU.PEVMF ໊લۭؒͷొ৔ ⾣ 4XJGU͸.PEVMFͰ໊લۭؒΛ࡞Δ ⾣ ໊લ͕িಥͯ͠΋ɺ໊લۭؒͰ۠ผͰ͖Δ // こちらは Foundation の Date 型 'PVOEBUJPO%BUF // こちらは自分の Date 型 &4,VNBHBJ%BUF // 衝突しなければ、名前空間は省略可能 %BUF 

9.

lඒ͍͠"1*Λॻ͜͏z 

10.

ඒ͍͠"1*Λॻ͜͏ ཎΈͳ͘ඒ͍͠ίʔυʹ ⾣ 4XJGU"1*%FTJHO(VJEFMJOFTࡦఆ ⾣ શͯͷ‫ݴ‬༿͕ແବͳ͘؆ܿʹද‫͢ݱ‬Δ͜ͱ let result: NSString = text.stringByReplacingOccurrencesOfString( pattern, withString: newText, options: NSStringCompareOptions .RegularExpressionSearch) let result = text.replacingOccurrences(of: pattern, with: newText, options: .regularExpression) 

11.

ͦΖͦΖ/4ϓϨϑΟοΫε ཁΒͳ͘ͳ͍Ͱ͢ʁ ⾣ ໊લۭ͕ؒ͋Ε͹ɺ۠ผͰ͖·͢ΑͶ ⾣ ͦΕͳΒɺ઀಄ࣙ͸৑௕Ͱ͢ΑͶ /41SFpY 

12.

/41SFpY࡟আ΁ 

13.

/41SFpY࡟আ ϧʔϧΛઃ͚Δ ⾣ ҋӢʹશͯΛ࡟আͤͣɺ͍͔ͭ͘͸ଘଓ ⾣ 4XJGUͷจԽɺͱΓΘ͚7BMVF5ZQFʹண໨ ⾣ 0CKFDUJWF$ͷจԽ΋ଚॏ 

14.

/41SFGJYͷ࡟ আ 

15.

/41SFpYͷ ࡟ আ Ϋϥε໊ͷ/4઀಄ࣙΛফ‫ڈ‬ ⾣ 'PVOEBUJPOϑϨʔϜϫʔΫ͕ର৅ w 6*,JUͳͲͷϋΠϨϕϧϑϨʔϜϫʔΫ͸ର৅֎ ⾣ ୯७ʹফ͢ɺͱ͸‫ݶ‬Βͳ͍ w ୅ସ‫ܕ‬Λ༻ҙͨ͠Γ w ͦͷ··ଘଓͨ͠Γ 

16.

/41SFpYͷ ଘଓ 

17.

/41SFpYͷଘଓ 0CKFDUJWF$ಛ༗ͷ΋ͷ ⾣ 0CKFDUJWF$ಛ༗ͷΫϥε ⾣ 0CKFDUJWF$ϥϯλΠϜͱີ઀ʹؔ༩͢Δ΋ͷ ͨͱ͑͹ʜ • NSObject • NSAutoreleasePool • NSException 

18.

/41SFpYͷଘଓ ϓϥοτϑΥʔϜ‫ݻ‬༗ͷ΋ͷ ⾣ "QQ,JU΍6*,JUͳͲɺϋΠϨϕϧ૚ͷ΋ͷ͸ҡ࣋ ⾣ ಉ༷ʹɺ࣮࣭ϋΠϨϕϧ૚ͷ/4Ϋϥε΋ҡ࣋ ͨͱ͑͹ʜ • NSUserNotification • NSBackgroundActivityScheduler • NSXPCConnection 

19.

/41SFpYͷଘଓ ಉ౳ͷ஋‫ܕ‬Λ࣋ͭ΋ͷ ⾣ ஋‫ʹܕ‬૬౰͢ΔΫϥεͰɺ஋‫৽͕ܕ‬ઃ͞Εͨ΋ͷ ⾣ /4෇͖ͷΫϥε‫ͱܕ‬ɺ/4ͳ͠ͷ஋‫ڞ͕ܕ‬ଘ ͨͱ͑͹ʜ • NSString, String • NSData, Data • NSArray, Array<Element> 

20.

/41SFpYͱͷ ‫ڞ‬ଘ 

21.

/41SFpYͱͷ ‫ ڞ‬ଘ ஋Λද‫͢ݱ‬Δͷ͕໨తͷ‫ܕ‬ ⾣ 0CKFDUJWF$͸l஋‫ܕ‬zΛΫϥεͰઃ‫ܭ‬ ⾣ 4XJGU͸l஋‫ܕ‬zΛߏ଄ମͰද‫͢ݱ‬Δ // Objective-C はクラスで頑張るしかない class Value : NSObject { … } class MutableValue : Value { … } // Swift は構造体にすると言語が積極サポート struct Value { … } 

22.

/41SFpYͱͷ ‫ ڞ‬ଘ /4஋‫ܕ‬΋4XJGUͰࣗવʹද‫͍ͨ͠ݱ‬ ⾣ 4XJGU͸ߏ଄ମͰද‫͢ݱ‬ΔจԽ ⾣ ஔ͖‫͕͍ͨ͑׵‬0CKFDUJWF$͸յͨ͘͠ͳ͍ // 構造体だと Objective-C で使えない struct Value : NSObjectProtocol { … } struct MutableValue : NSObjectProtocol { … } 

23.

/41SFpYͱͷ ‫ ڞ‬ଘ ஋‫ܕ‬Λ৽ઃ͢Δ ⾣ ಉ౳ͷ஋‫ܕ‬Λ/41SFpYແ͠Ͱ৽ઃ͢Δ ⾣ ‫ط‬ଘͷ/4‫ܕ‬Λ࢒ͯ͠0CKFDUJWF$ͷจԽΛ‫ޢ‬Δ // Objective-C のクラスはそのまま残す class Value : NSObject { … } class MutableValue : Value { … } // Swift に構造体を新設する struct Value { … } 

24.

/41SFpYͱͷ ‫ ڞ‬ଘ จԽؒͰ஋Λ‫͢͠౉ڮ‬Δ ⾣ ߏ଄ମͻͱͭͰ*NNVUBCMF΋.VUBCMF΋୲͏ ⾣ 0CKFDUJWF$ϒϦοδͰ૬‫઀ޓ‬ଓ͢Δ // Data と NSData は相互ブリッジ可能 let data = Data() as NSData let data = NSData() as Data // NSMutableData は Data から生成可能 let data = NSMutableData(data: Data()) // NSMutableData は NSData の mutableCopy で取得 let data = NSData().mutableCopy() // NSMutableData を Data へはブリッジ可能 let data = NSMutableData() as Data 

25.

৽͍͠஋‫ܕ‬ͷ ಛ௃ 

26.

৽͍͠஋‫ܕ‬ͷ ಛ ௃ ࢀরͱ$PQZ0O8SJUF ⾣ ‫ݪ‬ଇɺߏ଄ମͰ/4ΫϥεͷࢀরΛϥοϓ w Ӆṭͯ͠WBSͱMFUͰ੍‫͢ޚ‬Δ w ඞཁʹͳͬͨΒ಺༰Λෳ੡͢Δ $PQZ0O8SJUF  let data1 = Data() // 他の変数に代入しても、必要時までは共有 var data2 = data1 as Data // 書込時に初めて、内容を複製(data1 から独立) data = NSMutableData(data: otherData) 

27.

৽͍͠஋‫ܕ‬ͷ ಛ ௃ /4Ϋϥε͔Βߏ଄ମ΁ͷϒϦοδ ⾣ *NNVUBCMFΫϥε͔ΒϒϦοδʜ w ಺෦ʹ*NNVUBCMF΁ͷࢀরΛอ࣋͢Δ༷ࢠ w ॻ͖ࠐΈ࣌ʹ.VUBCMFΠϯελϯε΁ࣗಈৼସ ⾣ .VUBCMFΫϥε͔ΒϒϦοδʜ w ಺෦ʹ.VUBCMF΁ͷࢀরΛอ࣋͢Δ༷ࢠ 4XJGUͰ৽ઃ͞ΕͨதͰ.VUBCMFΫϥεΛ࣋ͭ஋‫ܕ‬ • IndexSet • CharacterSet • Data 

28.

৽͍͠஋‫ܕ‬ͷ ಛ ௃ γϯϓϧͳ΋ͷ͸஋‫Ͱܕ‬ද‫ݱ‬ ⾣ ͍͔ͭ͘ͷ஋‫ܕ‬͸ɺࢀরͰ͸ͳ͘஋Ͱද‫ݱ‬ ⾣ $PQZ0O8SJUFΑΓ΋ܰྔಈ࡞ ͜ΕΒ͕஋Ͱද‫͞ݱ‬ΕΔ • Date • AffineTransform • Notification 

29.

৽͍͠஋‫ܕ‬ͷ ಛ ௃ ·ͱΊ ⾣ ύϑΥʔϚϯε͕े෼ʹߟྀ͞Ε͍ͯΔ ⾣ ੵ‫ۃ‬తʹ࢖͍ͬͯͬͯେৎ෉ͦ͏ ⾣ ͨͩ͠l஋‫ܕ‬zͰ͋Δ͜ͱʹ஫ҙ w ஋͸‫ڞ‬༗͞Εͳ͍ ⾣ ϒϦοδ͢ΔͱผΠϯελϯεʹͳΔ w ಛʹXFBLࢀরʹ஫ҙ 

30.

‫ط‬ଘ‫΁ܕ‬ͷ௥Ճϧʔϧ 

31.

ࠓ‫ޙ‬Λߟྀͯ͠อཹ 

32.

ࠓ‫ޙ‬Λߟྀͯ͠อཹ ஋‫ͳʹܕ‬Δ༧ఆͷ΋ͷ͸อཹ ⾣ ࠓ‫ޙ‬ɺ஋‫ͯ͠ͱܕ‬ද‫͢ݱ‬Δ༧ఆͷ΋ͷ͸ଘଓ ⾣ /4ͳ͠ͷߏ଄ମΛ࡞ͬͯɺϒϦοδ͢Δʢ͸ͣʣ ͜ΕΒ͕஋‫Ͱܕ‬ද‫ݱ‬༧ఆ • NSAttributedString • NSRegularExpression • NSPredicate 

33.

ࠓ‫ޙ‬Λߟྀͯ͠อཹ -PDL‫ܥ‬ͷΫϥε͸อཹ ⾣ ࠓ‫ޙ‬ɺฒྻॲཧͷඪ४Խͱ߹Θͤͯ࠶ߟ͢Δ ⾣ ͦΕ·Ͱ/41SFpYΛ࢒͓ͯ͘͠ ର৅Ϋϥε • NSLock 

34.

ࠓ‫ޙ‬Λߟྀͯ͠อཹ "OZ0CKFDUΛӡ༻͢ΔΫϥε͸อཹ ⾣ ಈ࡞͕"OZ0CKFDUʹґଘ͢Δ΋ͷ͸อཹ ⾣ ஋‫ܕ‬ͷ৽ઃ΋౿·͑ͯ࠶‫ݕ‬౼ ରԠ͕อཹ͞ΕΔΫϥε • class NSCache<AnyObject, AnyObject> • class NSMapTable<AnyObject, AnyObject> • class NSHashTable<AnyObject> • class NSOrderedSet 

35.

࡟আ͍ͭͰʹ໊শมߋ 

36.

࡟আ͍ͭͰʹ ໊ લ มߋ ໾໨Λద੾ʹද͢Α͏ʹ໊લมߋ ⾣ /45BTLΛ1SPDFTTʹมߋ w ैલͷ1SPDFTT͸$PNNBOE-JOFʹมߋ ⾣ /40VUQVU4USFBNΛ0VUQVU4USFBNʹมߋ w ैલͷ0VUQVU4USFBN͸5FYU0VUQVU4USFBNʹมߋ 

37.

࡟আ͍ͭͰʹ ໊ લ มߋ ద੾ͳҐஔʹωετ͢Δ ⾣ έʔεόΠέʔεͰ࣮૷͢Δ༷ࢠ ⾣ /44USJOH&ODPEJOHΛ4USJOH&ODPEJOHʹҠಈ ⾣ ͍͔ͭ͘͸ɺ‫ܕ‬ΤΠϦΞεͰωετ͢Δ༷ࢠ w /4%BUB4FBSDI0QUJPOTΛ/4%BUB4FBSDI0QUJPOT΁ w %BUB4FBSDI0QUJPOT͸ɺ‫ܕ‬ΤΠϦΞεͰఆٛ ⾣ /45JNF;POF/BNF4UZMF͸/45JNF;POF/BNF4UZMFʹ w 5JNF;POFʹ͸/BNF4UZMFΛఆٛ͠ͳ͍༷ࢠ 

38.

/41SFpYपΓ͸େ͖ͳมߋ 4XJGUΒ͕͠͞‫ڽ‬ॖ͞Ε͍ͯΔҹ৅ 

39.

۩ମతʹ/41SFpY͕Ͳ͏มΘ͔ͬͨ ·ͱΊΒΕ͍ͯΔࢿྉ ⾣ 4&%SPQ/41SFpYJO4XJGU'PVOEBUJPO w %SPQ/4QSFpY  ʜ /4͕औΕͨ‫ܕ‬ͷϦετ w )PJTUFEUZQFT  ʜ ωετ͞Εͨ‫ܕ‬ͷϦετ ⾣ 4&.VUBCJMJUZBOE'PVOEBUJPO7BMVF5ZQFT w /FX7BMVF5ZQFT ʜ ৽͍͠஋‫ܕ‬ͷϦετ 

40.

/41SFpYʹࣖΛ܏͚ͯΈΔͱ 4XJGUͷlࠓz͕ฉ͖͑ͯͦ͜͏ ⾣ ஋‫ͱܕ‬Ϋϥε‫ܕ‬ͷϒϦοδ ⾣ ஋‫ܕ‬ͷύϑΥʔϚϯε ⾣ ฒྻॲཧͷ‫ܭ‬ը ⾣ ϋΠϨϕϧͳϑϨʔϜϫʔΫ͸1SFpYଘଓ ⾣ "OZ0CKFDUͱߏ଄ମͷจԽɾ‫ڍ‬ಈͷҧ͍ ⾣ ωετ‫ܕ‬ 

41.

&OKPZ4XJGU 5IBOLZPV /41SFpY ͔ͦ͜Β‫͢౉ݟ‬4XJGUͷ‫ܠ‬৭ &;/&5‫۽‬୩༑޺ IUUQF[OFUKQ ⾣ /41SFpYΛফ͚ͩ͢͡Όͳ͍ ⾣ ஋‫ܕ‬ͷ৽ઃͱϒϦοδ ⾣ ϋΠϨϕϧϑϨʔϜϫʔΫͰ͸ଘଓ ⾣ ࡟আ͍ͭͰʹ໊শมߋ