>100 Views
October 01, 16
スライド概要
Swift 3 で NS Prefix が消去されたことについて、ざっくり広めに LT してきました。単純に消えるだけじゃない大きな変化、調べててなかなか面白かったです。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 2,736 でした。
2016/10/01 第一回スタートアップiOS/Android勉強会 での発表資料です。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
/41SFGJY ͔ͦ͜Β͢ݟ4XJGUͷܠ৭ ୈҰճελʔτΞοϓJ04"OESPJEษڧձ PO &;/&5۽୩༑ IUUQF[OFUKQ 4XJGU
۽୩༑ 5PNPIJSP,VNBHBJ ⾣ 4XJGU͕ޠݴେ͖Ͱ͢ʂ ⾣ ΈΜͳͰָ͠Ήษڧձ͕େ͖Ͱ͢ʂ ⾣ ϓϩάϥϛϯάͷָ͠͞Λ͍͖͍͑ͯͨɻ !FT@LVNBHBJ UPNPIJSPLVNBHBJ $PEF1JFDFGPSNBD04 IUUQF[OFUKQ 9DPEFపఈղઆ
ษڧձΛ։࠵͍ͯ͠·͢ɻ Θ͍Θ͍ɺָ͘͠ɺ ΈΜͳͰޠΒ͑ΔॴΛࢦͯ͠ ԣJ1IPOF։ൃऀษڧձ ୈճ݄ͷ։࠵ʢඪʣ ΧδϡΞϧ4XJGUษڧձ ୈճΛ݄ʹ։࠵ ΈΜͳͰ4XJGU ෮शձ ୈճΛ݄ʹ։࠵ ZJEFW ˏԣɾഅंಓ IUUQTBUOEPSHHSPVQTZJEFW DTXJGU !ԣɾ੨༿ IUUQTBUOEPSHHSPVQTDTXJGU NJOOB@EF@TXJGU ˏौ୩ IUUQDTXJGUDPOOQBTTDPN
NPPLNPPLSBEJP Ќ൛ ϜοΫϜοΫϥδΦ ۽୩ͱ៸໘͕ϓϩάϥϛϯάίʔυͷ͔Β ௌ͑ͯ͘͜ΔʹࣖΛָ͚ͯ͠ΉϥδΦ ຖ݄ୈ̎ɾୈ̐ ݄༵ ʹ৴ IUUQNPPLNPPLSBEJPDPNB ⾣ ୈ̐ ʢ݄ʹ৴༧ఆʣ ⾣ ୈ̏ ʰίϝϯτʱ ⾣ ୈ̎ ʰྻܕڍʱ ⾣ ୈ̍ ʰϓϩάϥϛϯάͱࢲͨͪʱ
/41SFGJY
/41SFpYͱʁ ͖࣌ྑ͖ݹͷҨ࢈ ⾣ 0CKFDUJWF$ͷ࣌ͷ໊લۭؒ ⾣ Ϋϥε໊ʹจࣈҎ্Ͱ಄ࣙΛ༩ ⾣ ଞͷਓ͕࡞ͬͨΫϥεͱͷ໊લͷিಥΛճආ // こちらは Foundation の Date 型 /4%BUF // こちらは自分の Date 型 &4,%BUF
4XJGU.PEVMF
4XJGU.PEVMF ໊લۭؒͷొ ⾣ 4XJGU.PEVMFͰ໊લۭؒΛ࡞Δ ⾣ ໊લ͕িಥͯ͠ɺ໊લۭؒͰ۠ผͰ͖Δ // こちらは Foundation の Date 型 'PVOEBUJPO%BUF // こちらは自分の Date 型 &4,VNBHBJ%BUF // 衝突しなければ、名前空間は省略可能 %BUF
lඒ͍͠"1*Λॻ͜͏z
ඒ͍͠"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)
ͦΖͦΖ/4ϓϨϑΟοΫε ཁΒͳ͘ͳ͍Ͱ͢ʁ ⾣ ໊લۭ͕ؒ͋Εɺ۠ผͰ͖·͢ΑͶ ⾣ ͦΕͳΒɺ಄ࣙͰ͢ΑͶ /41SFpY
/41SFpYআ
/41SFpYআ ϧʔϧΛઃ͚Δ ⾣ ҋӢʹશͯΛআͤͣɺ͍͔ͭ͘ଘଓ ⾣ 4XJGUͷจԽɺͱΓΘ͚7BMVF5ZQFʹண ⾣ 0CKFDUJWF$ͷจԽଚॏ
/41SFGJYͷ আ
/41SFpYͷ আ Ϋϥε໊ͷ/4಄ࣙΛফڈ ⾣ 'PVOEBUJPOϑϨʔϜϫʔΫ͕ର w 6*,JUͳͲͷϋΠϨϕϧϑϨʔϜϫʔΫର֎ ⾣ ୯७ʹফ͢ɺͱݶΒͳ͍ w ସܕΛ༻ҙͨ͠Γ w ͦͷ··ଘଓͨ͠Γ
/41SFpYͷ ଘଓ
/41SFpYͷଘଓ 0CKFDUJWF$ಛ༗ͷͷ ⾣ 0CKFDUJWF$ಛ༗ͷΫϥε ⾣ 0CKFDUJWF$ϥϯλΠϜͱີʹؔ༩͢Δͷ ͨͱ͑ʜ • NSObject • NSAutoreleasePool • NSException
/41SFpYͷଘଓ ϓϥοτϑΥʔϜݻ༗ͷͷ ⾣ "QQ,JU6*,JUͳͲɺϋΠϨϕϧͷͷҡ࣋ ⾣ ಉ༷ʹɺ࣮࣭ϋΠϨϕϧͷ/4Ϋϥεҡ࣋ ͨͱ͑ʜ • NSUserNotification • NSBackgroundActivityScheduler • NSXPCConnection
/41SFpYͷଘଓ ಉͷܕΛ࣋ͭͷ ⾣ ʹܕ૬͢ΔΫϥεͰɺ৽͕ܕઃ͞Εͨͷ ⾣ /4͖ͷΫϥεͱܕɺ/4ͳ͠ͷڞ͕ܕଘ ͨͱ͑ʜ • NSString, String • NSData, Data • NSArray, Array<Element>
/41SFpYͱͷ ڞଘ
/41SFpYͱͷ ڞଘ Λද͢ݱΔͷ͕తͷܕ ⾣ 0CKFDUJWF$lܕzΛΫϥεͰઃܭ ⾣ 4XJGUlܕzΛߏମͰද͢ݱΔ // Objective-C はクラスで頑張るしかない class Value : NSObject { … } class MutableValue : Value { … } // Swift は構造体にすると言語が積極サポート struct Value { … }
/41SFpYͱͷ ڞଘ /4ܕ4XJGUͰࣗવʹද͍ͨ͠ݱ ⾣ 4XJGUߏମͰද͢ݱΔจԽ ⾣ ஔ͖͕͍ͨ͑0CKFDUJWF$յͨ͘͠ͳ͍ // 構造体だと Objective-C で使えない struct Value : NSObjectProtocol { … } struct MutableValue : NSObjectProtocol { … }
/41SFpYͱͷ ڞଘ ܕΛ৽ઃ͢Δ ⾣ ಉͷܕΛ/41SFpYແ͠Ͱ৽ઃ͢Δ ⾣ طଘͷ/4ܕΛͯ͠0CKFDUJWF$ͷจԽΛޢΔ // Objective-C のクラスはそのまま残す class Value : NSObject { … } class MutableValue : Value { … } // Swift に構造体を新設する struct Value { … }
/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
৽͍͠ܕͷ ಛ
৽͍͠ܕͷ ಛ ࢀরͱ$PQZ0O8SJUF ⾣ ݪଇɺߏମͰ/4ΫϥεͷࢀরΛϥοϓ w Ӆṭͯ͠WBSͱMFUͰ੍͢ޚΔ w ඞཁʹͳͬͨΒ༰Λෳ͢Δ $PQZ0O8SJUF let data1 = Data() // 他の変数に代入しても、必要時までは共有 var data2 = data1 as Data // 書込時に初めて、内容を複製(data1 から独立) data = NSMutableData(data: otherData)
৽͍͠ܕͷ ಛ /4Ϋϥε͔ΒߏମͷϒϦοδ ⾣ *NNVUBCMFΫϥε͔ΒϒϦοδʜ w ෦ʹ*NNVUBCMFͷࢀরΛอ࣋͢Δ༷ࢠ w ॻ͖ࠐΈ࣌ʹ.VUBCMFΠϯελϯεࣗಈৼସ ⾣ .VUBCMFΫϥε͔ΒϒϦοδʜ w ෦ʹ.VUBCMFͷࢀরΛอ࣋͢Δ༷ࢠ 4XJGUͰ৽ઃ͞ΕͨதͰ.VUBCMFΫϥεΛ࣋ͭܕ • IndexSet • CharacterSet • Data
৽͍͠ܕͷ ಛ γϯϓϧͳͷͰܕදݱ ⾣ ͍͔ͭ͘ͷܕɺࢀরͰͳ͘Ͱදݱ ⾣ $PQZ0O8SJUFΑΓܰྔಈ࡞ ͜ΕΒ͕Ͱද͞ݱΕΔ • Date • AffineTransform • Notification
৽͍͠ܕͷ ಛ ·ͱΊ ⾣ ύϑΥʔϚϯε͕ेʹߟྀ͞Ε͍ͯΔ ⾣ ੵۃతʹ͍ͬͯͬͯେৎͦ͏ ⾣ ͨͩ͠lܕzͰ͋Δ͜ͱʹҙ w ڞ༗͞Εͳ͍ ⾣ ϒϦοδ͢ΔͱผΠϯελϯεʹͳΔ w ಛʹXFBLࢀরʹҙ
طଘܕͷՃϧʔϧ
ࠓޙΛߟྀͯ͠อཹ
ࠓޙΛߟྀͯ͠อཹ ͳʹܕΔ༧ఆͷͷอཹ ⾣ ࠓޙɺͯ͠ͱܕද͢ݱΔ༧ఆͷͷଘଓ ⾣ /4ͳ͠ͷߏମΛ࡞ͬͯɺϒϦοδ͢Δʢͣʣ ͜ΕΒ͕Ͱܕදݱ༧ఆ • NSAttributedString • NSRegularExpression • NSPredicate
ࠓޙΛߟྀͯ͠อཹ -PDLܥͷΫϥεอཹ ⾣ ࠓޙɺฒྻॲཧͷඪ४Խͱ߹Θͤͯ࠶ߟ͢Δ ⾣ ͦΕ·Ͱ/41SFpYΛ͓ͯ͘͠ ରΫϥε • NSLock
ࠓޙΛߟྀͯ͠อཹ "OZ0CKFDUΛӡ༻͢ΔΫϥεอཹ ⾣ ಈ࡞͕"OZ0CKFDUʹґଘ͢Δͷอཹ ⾣ ܕͷ৽ઃ౿·͑ͯ࠶ݕ౼ ରԠ͕อཹ͞ΕΔΫϥε • class NSCache<AnyObject, AnyObject> • class NSMapTable<AnyObject, AnyObject> • class NSHashTable<AnyObject> • class NSOrderedSet
আ͍ͭͰʹ໊শมߋ
আ͍ͭͰʹ ໊ લ มߋ Λదʹද͢Α͏ʹ໊લมߋ ⾣ /45BTLΛ1SPDFTTʹมߋ w ैલͷ1SPDFTT$PNNBOE-JOFʹมߋ ⾣ /40VUQVU4USFBNΛ0VUQVU4USFBNʹมߋ w ैલͷ0VUQVU4USFBN5FYU0VUQVU4USFBNʹมߋ
আ͍ͭͰʹ ໊ લ มߋ దͳҐஔʹωετ͢Δ ⾣ έʔεόΠέʔεͰ࣮͢Δ༷ࢠ ⾣ /44USJOH&ODPEJOHΛ4USJOH&ODPEJOHʹҠಈ ⾣ ͍͔ͭ͘ɺܕΤΠϦΞεͰωετ͢Δ༷ࢠ w /4%BUB4FBSDI0QUJPOTΛ/4%BUB4FBSDI0QUJPOT w %BUB4FBSDI0QUJPOTɺܕΤΠϦΞεͰఆٛ ⾣ /45JNF;POF/BNF4UZMF/45JNF;POF/BNF4UZMFʹ w 5JNF;POFʹ/BNF4UZMFΛఆٛ͠ͳ͍༷ࢠ
/41SFpYपΓେ͖ͳมߋ 4XJGUΒ͕͠͞ڽॖ͞Ε͍ͯΔҹ
۩ମతʹ/41SFpY͕Ͳ͏มΘ͔ͬͨ ·ͱΊΒΕ͍ͯΔࢿྉ ⾣ 4&%SPQ/41SFpYJO4XJGU'PVOEBUJPO w %SPQ/4QSFpY ʜ /4͕औΕͨܕͷϦετ w )PJTUFEUZQFT ʜ ωετ͞ΕͨܕͷϦετ ⾣ 4&.VUBCJMJUZBOE'PVOEBUJPO7BMVF5ZQFT w /FX7BMVF5ZQFT ʜ ৽͍͠ܕͷϦετ
/41SFpYʹࣖΛ͚ͯΈΔͱ 4XJGUͷlࠓz͕ฉ͖͑ͯͦ͜͏ ⾣ ͱܕΫϥεܕͷϒϦοδ ⾣ ܕͷύϑΥʔϚϯε ⾣ ฒྻॲཧͷܭը ⾣ ϋΠϨϕϧͳϑϨʔϜϫʔΫ1SFpYଘଓ ⾣ "OZ0CKFDUͱߏମͷจԽɾڍಈͷҧ͍ ⾣ ωετܕ
&OKPZ4XJGU 5IBOLZPV /41SFpY ͔ͦ͜Β͢ݟ4XJGUͷܠ৭ &;/&5۽୩༑ IUUQF[OFUKQ ⾣ /41SFpYΛফ͚ͩ͢͡Όͳ͍ ⾣ ܕͷ৽ઃͱϒϦοδ ⾣ ϋΠϨϕϧϑϨʔϜϫʔΫͰଘଓ ⾣ আ͍ͭͰʹ໊শมߋ