- åæå ãã¹ã³ãŒãïŒã¹ã³ãŒãïŒãåŒæ°æ§æãªã©ã®åºæ¬çãªèšèªæ§é
- ãã¿ãŒã³ãããã³ã°
- ãšã©ãŒåŠç
2çªç®ã®éšåã§ã¯ãæ®ãã«ã€ããŠæ€èšããŸãã
- ãããã³ã«æ¡åŒµ
- å¯çšæ§ãã§ãã¯
- Objective-Cããã³Cãšã®çžäºäœçš
Swift 2ã®æ°æ©èœã«ã€ããŠã Githubã«ã³ãŒããèšèŒãããŠãããµã³ãã«ãšãšãã«çŽ¹ä»ããŸãã
ãããã³ã«æ¡åŒµ
Swift 2ã§ãããã³ã«æ¡åŒµãå¯èœã«ãªãããããã³ã«ãå®è£ ããã¯ã©ã¹ãæ§é ãããã³åæã«æ°ããé¢æ°ïŒå®è£ æžã¿ïŒãè¿œå ã§ããããã«ãªããŸããã
Swift 2ããåã¯ãObjective-CãšSwift 1.xã®äž¡æ¹ã§ããããã³ã«ã«ã¯ã¡ãœãã宣èšã®ã¿ãå«ãŸããŠããŸããã Swift 2ã®ãããã³ã«æ¡åŒµã«ããããããã³ã«ã«ã¡ãœããã®å®è£ ã宣èšãšãšãã«å«ããããšãã§ããŸãã ç§ãã¡ã¯ãObjective-Cã®ãã®æ©èœãäœå¹ŽãåŸ ã£ãŠããã®ã§ãæ°ããèšèªã§å ·äœåãããã®ãèŠãã®ã¯çŽ æŽãããããšã§ãã
ç¹å®ã®ãããã³ã«ïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒã確èªãããã¹ãŠã®ã¿ã€ãã«ããã€ãã®æ©èœãè¿œå ããå¿ èŠãããããšããããããŸãã ããšãã°ããã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ã¯ãèŠçŽ ã®å€æã«åºã¥ããŠæ°ããã³ã¬ã¯ã·ã§ã³ãäœæãããšããæŠå¿µããµããŒãããŸãã å€ãã¹ã¿ã€ã«ã®ãããã³ã«ã§ã¯ã2ã€ã®æ¹æ³ã§ãã®å¯èœæ§ãå®è£ ã§ããŸãã1ïŒã¡ãœããããããã³ã«ã«é 眮ãããã®ãããã³ã«ã確èªããåã¿ã€ããã¡ãœãããå®è£ ããããšãèŠæ±ãããã2ïŒãããã³ã«ã確èªããã¿ã€ãã®å€ã§æ©èœããã°ããŒãã«é¢æ°ãäœæããŸãã
ã»ãšãã©ã®å ŽåãCocoaïŒObjective-CïŒã¯æåã®ãœãªã¥ãŒã·ã§ã³ã奜ã¿ãŸãã
Swift 1.xã¯2çªç®ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸããã CollectionTypeã§æäœãããmapãªã©ã®ã°ããŒãã«é¢æ°ã ããã«ãããå®è£ äžã®ã³ãŒãã®åªããåé¢ãæäŸãããŸããããã²ã©ãæ§æãšç¹å®ã®ã¿ã€ãã®å®è£ ããªãŒããŒã©ã€ãããããšãã§ããŸããã§ããã
let x = filter(map(numbers) { $0 * 3 }) { $0 >= 0 } //-- Swift 1
ãããã³ã«æ¡åŒµã«ãããä»ã®2ã€ãããå€§å¹ ã«åªãã3çªç®ã®æ©äŒãçãŸããŸããã mapã¯ã CollectionTypeãããã³ã«ã®æ¡åŒµã§å®è£ ã§ããŸãã CollectionTypeãããã³ã«ããµããŒããããã¹ãŠã®ã¿ã€ãã¯ã ãããã®å®è£ ãå®å šã«ç¡æã§èªåçã«åãåããŸã ã
let x = numbers.map { $0 * 3 }.filter { $0 >= 0 } //-- Swift 2
äŸãšããŠãSwift 2ã§CollectionTypeãããã³ã«ã®æ¡åŒµãšããŠæ°ããmyMapã¡ãœããã®å®è£ ãæ€èšããŸãã
ãã®çµæã é å<T>é åã«ããã«myMapã䜿çšã§ããŸã
èŸæžçšèŸæž<ããŒïŒå€>
ã»ããã»ãã<T>
String.charactersæååçš
ã¹ã©ã€ã¹ArraySlice <T>ã®å Žå
StrideThrough <T> strikesã®å ŽåãçŽæ¥ã§ã¯ãªããã·ãŒã±ã³ã¹ïŒ SequenceTypeãããã³ã«ïŒãã³ã¬ã¯ã·ã§ã³ïŒ CollectionTypeãããã³ã«ïŒã«å€æããmapãä»ããŠ
ãããã³ã«æ¡åŒµã¯ãAppleããããã³ã«æåããã°ã©ãã³ã°ïŒPOPïŒã§ãããšäž»åŒµããæ°ãããœãããŠã§ã¢èšèšã¢ãããŒãã®äžå¿ã«ãããåŸæ¥ã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ïŒOOPïŒããã³æ©èœããã°ã©ãã³ã°ïŒFPïŒèŠçŽ ãšãšãã«Swiftã«ååšããŸãã ãå£ããããåºæ¬ã¯ã©ã¹ããç¶æ¿ã®åæ§ãšè匱æ§ã ããã€ã€ã¢ã³ãã®åé¡ã ããªããžã§ã¯ããžã®åç §ã®æé»çãªåé¢ãããã£ã¹ããããŠã³ã®é »ç¹ãªäœ¿çšã®å¿ èŠæ§ïŒããŠã³ãã£ã¹ãïŒãªã©ã®OOPåé¡ãå æããå¿ èŠããããŸãã ïŒãªãŒããŒã©ã€ããããã¡ãœããå ã ãŸããå€ãã®éçºè ãèšèã§ããªã¢ãŒãã£ãºã ã説æããã®ã¯ã©ãã»ã©é£ãããã§ãããäŸã§ç€ºãæ¹ãç°¡åã§ãããããã³ã«æåããã°ã©ãã³ã°ã®æ©èœãäŸã§ç€ºããŸãã
äŸ1. Fisher-Jensã·ã£ããã«ã¢ã«ãŽãªãºã
ãããã®éãã詳ããèŠãããã«ãSwift 1.2ïŒOOPïŒããã³Swift 2ïŒPOPïŒã®ã·ã£ããã«é¢æ°ã䜿çšããŠã³ã¬ã¯ã·ã§ã³èŠçŽ ããæ··åã ããFisher-Jens Shuffle ã¢ã«ãŽãªãºã ã®å®è£ ãäŸãšããŠèŠãŠã¿ãŸãããã ãã®ã¢ã«ãŽãªãºã ã¯ãã«ãŒãã²ãŒã ã§ã«ãŒããæ±ããšãã«ãã䜿çšãããŸãã
Swift 1.2ã§ã¯ãæ¹æ³2ã«åŸã£ãŠã³ã¬ã¯ã·ã§ã³ãæäœããã°ããŒãã«ã·ã£ããã«é¢æ°ãè¿œå ããŸããã€ãŸãã ãžã§ããªãã¯ãæã€ã°ããŒãã«é¢æ°ã䜿çšããå Žåã§ãã
ãã®æ©èœãããã«è©³ããèŠãŠã¿ãŸãããã var listïŒCã³ã¬ã¯ã·ã§ã³èªäœã¯ããã®ã°ããŒãã«é¢æ°ã®å ¥åãžã®åŒæ°ãšããŠäœ¿çšãããåãã¿ã€ãCã®æ°ããã³ã¬ã¯ã·ã§ã³ãå ã®ãªã¹ãã³ã¬ã¯ã·ã§ã³ã®ãæ··åãå€ãšãšãã«è¿ãããŸãã ãã®ã°ããŒãã«é¢æ°ã¯ã MutableCollectionTypeãããã³ã«ããµããŒãããæŽæ°ã€ã³ããã¯ã¹ãæã€ãã¹ãŠã®ã¿ã€ãã«äœ¿çšã§ããŸãã ãã®ãããªã³ã¬ã¯ã·ã§ã³ã2ã€ãããŸãïŒ Array <T> arrayããã³ArraySlice <T> slice
ãããããã®ã°ããŒãã«æ©èœã®é åã¯äœã§ããïŒ
shuffle(strings1) shuffle(numbers1)
ãã®é¢æ°ã§ã¯ãæ¬åŒ§å ã«ã³ã¬ã¯ã·ã§ã³èªäœãæå®ããå¿ èŠããããããããä»ãã®è¡šèšã䜿çšã§ããŸããã å€ãã®ãã¹ããããæ¬åŒ§ã«ã€ãªããå€æã®ãã§ãŒã³å šäœãããå Žåããããéåžžã«äžäŸ¿ã§ãããããããã¹ãŠãåã¡ãœãããšäº€äºã«ãªã£ãŠããå Žåãäžè¬çã«ã¯çœå®³ã§ãã äžèšã§åæ§ã®æ§æããã§ã«èŠãŸããã
let x = filter(map(numbers) { $0 * 3 }) { $0 >= 0 } //-- Swift 1
Swift 1.2ã§ããã€ã³ããè¡šèšã䜿çšããå Žåã¯ã é åã¯ã©ã¹ãªã©ã®åã ã®ã¿ã€ãã®æ¡åŒµã«ã·ã£ããã«é¢æ°ãè¿œå ããŸãïŒããã¯ã¡ãœãã1ã§ãïŒã ãããŠããã®å Žã§å€åããïŒå€æŽããïŒshuffleInPlaceã¡ãœãããšãå ã®é åã®ãæ··åãèŠçŽ ãæã€æ°ããé åãè¿ãïŒå€æŽããªãïŒshuffleã¡ãœããã®äž¡æ¹ãè¿œå ã§ããŸãã
æåŸã®2ã€ã®ã¡ãœããã¯ã é åé åã®æ¡åŒµã§ãããé åã§ã®ã¿äœ¿çšã§ããŸãã
SetãArraySliceãããã®ä»ã®CollectionTypeããããã䜿çšã§ããŸããã
Swift 2ã§ã¯ã shuffleããã³shuffleInPlaceã¡ãœãããè¿œå ããŠã CollectionTypeããã³MutableCollectionTypeãããã³ã«ãæ¡åŒµããŸã ïŒã¡ãœãã3ïŒã
ãããã³ã«ã®æ¡åŒµã«ããã shuffleããã³shuffleInPlaceã¡ãœãããSet ã Array ã ArraySliceããã³ãã®ä»ã®CollectionTypeã«ãè¿œå ã®åŽåãªãã§ãå¿ èŠãªããã€ã³ããè¡šèšã§é©çšã§ããããã«ãªããŸããã
Swift 2ã§ãããã³ã«ãæ¡åŒµããå Žåãåã®å¶éãèšå®ã§ããŸãã ã³ãŒããããããããã«ãæåã«ã€ã³ããã¯ã¹ãšããŠæŽæ°ã䜿çšããå¯å€ã³ã¬ã¯ã·ã§ã³MutableCollectionTypeã«å¯ŸããŠã®ã¿ãããã³ã«æ¡åŒµãå®è¡ãã次ã«ãããCollectionTypeã«æ¡åŒµããŸã ã
æåŸã«ãã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ããæ··åãããã¢ã«ãŽãªãºã ã«é¢ããŠãå°ãçºèšããå¿ èŠããããŸãã Swift 2ã«ã¯ãæ¢ã«GameplayKit㧠Fisher-Jensã·ã£ããã«ã¢ã«ãŽãªãºã ã®å¹æçã§æ£ããå®è£ ããããŸãïŒååã«ããããããã²ãŒã ã ãã§ãªãé©åã§ãïŒã 確ãã«ããã®ã¡ãœããã¯é åã§ã®ã¿æ©èœããŸãã
äŸ2.ããããªããã€ãïŒãã€ãã©ã€ã³ïŒæŒç®å|>ãããã³ã«æ¡åŒµã®åºçŸ
Swiftã®å°æ¥ãšãé¢æ°åããã°ã©ãã³ã°æŒç®åãå«ãã«ã¹ã¿ã æŒç®åã®äœæã®å¯èœæ§ã«ãããé¢æ°åããã°ã©ãã³ã°ææ³ã䜿çšããŠããã€ãã®åé¡ã解決ããè©Šã¿ãè¡ãããéåžžã«æåããŠããŸãã ç¹ã«ããã©ã¹ããã¯ã«ãŒãã®ãã§ãã¯ãã£ãžãããèšç®ããããã®Lunaã¢ã«ãŽãªãºã ã§ã¯ããã€ãïŒãã€ãã©ã€ã³ïŒæŒç®åã䜿çšããŠãé¢æ°ãšã¡ãœããéã§ã®è¿·æãªã¹ããŒãåé¿ããããšãææ¡ãããŸããã ããããSwift 2ãç»å Žãããããã³ã«æ¡åŒµæè¡ã«ãããã®ã¿ã¹ã¯ãããã«ç°¡åã«ãªããŸããã
éçºè ã説æããå ã®ã¢ã«ãŽãªãºã
- 1.ãã§ãã¯ãããã·ãŒã±ã³ã¹ã®çªå·ã«ã¯ãå³ããå·Šã«çªå·ãä»ããããŸãã
- 2.å¥æ°ã®å Žæã«ããçªå·ã¯å€æŽãããŸããã
- 3.å¶æ°ã®å Žæã®æ°å€ã«2ãæããŸãã
- 4.ãã®ãããªä¹ç®ã®çµæãšããŠ9ãã倧ããæ°ã衚瀺ãããå ŽåïŒããšãã°ã8Ã2 = 16ïŒãçµæã®ç©ã®æ¡ã®åèšã«çœ®ãæããããŸãïŒããšãã°ã16ïŒ1 + 6 = 7ã18ïŒ1 + 8 = 9ïŒ-1æ¡ã®æ°ãã€ãŸããæ°åã
- 5.å€æã®çµæåŸããããã¹ãŠã®æ°å€ãåèšãããŸãã åèšã10ã®åæ°ã§ããå ŽåãåæããŒã¿ã¯æ£ããã§ãã
ã¢ã«ãŽãªãºã ã¯äžé£ã®ã¹ãããã§æ§æãããŸããåã¹ãããã¯ããããã³ã«ãŸãã¯ã¿ã€ãã®æ¡åŒµæ©èœã䜿çšããããæ¢ç¥ã®æ¹æ³ã䜿çšããŠèª¬æããŸãã
ãŸããSwift 2ã§ã¯Stringã¯ãã¯ãã·ãŒã±ã³ã¹ã§ã¯ãªãã String.charactersã¯æåã®ã·ãŒã±ã³ã¹ã§ãããæåãæŽæ°ã«å€æããå¿ èŠãããããšãæãåºããŠãã ããã Intåã®æ¡åŒµã§ãã®å€æãæ§ç¯ããŸãã ã€ãŸãã String.toIntegerã®ä»£ããã«ã Int.initïŒStringïŒãååŸããŸãã
ã¯ã¬ãžããã«ãŒãçªå·ã«ã¹ããŒã¹ãå«ãŸããŠããå¯èœæ§ãããããããã®å€æã¯Optionalãè¿ããåä¿¡ããæŽæ°ã«å¯ŸããŠåŒãç¶ãç®è¡æŒç®ãå®è¡ããå¿ èŠããããããSwift 2ã§ç»å ŽããflatMapã¡ãœããã䜿çšããŠãã«ãŒãçªå·ã®ãã¹ãŠã®ã¹ããŒã¹ãåé€ããŸã
ç§ãã¡ã®ã¢ã«ãŽãªãºã ã«ããã°ãæ°åãå³ããå·Šã«èæ ®ãããããã¯å·Šããå³ã«é²ãã®ã§ã reverseã¡ãœãããštrivial mapã¡ãœããã䜿çšããŠæ°åã®ã·ãŒã±ã³ã¹ãå察æ¹åã«äžŠã¹ãŸã
ãã ããåçŽãªãããã§ã¯ãªããã·ãŒã±ã³ã¹ã®åNçªç®ã®ã¡ã³ããŒã«å¯ŸããŠã®ã¿å€æãå®è¡ããããããå¿ èŠã§ãã å床ãæ¡åŒµãå®è¡ããŸãããã¿ã€ãã§ã¯ãªãSequenceTypeãå®è¡ããŸã
次ã®çµæãåŸãããŸã
次ã«ãæŽæ°ãå«ãã·ãŒã±ã³ã¹ã®åèšãèšç®ã§ããã¡ãœãããå¿ èŠã§ãã
ããã³å¥ã®æ°ãæ³ãšããæ°ãèšç®ããæ¹æ³
ãã®çµæã luhnchecksumïŒïŒã¡ãœãããååŸããŸãããã®ã¡ãœããã¯ã Stringåã«è¿œå ãã1è¡ã§ãã§ãã¯ãµã ãèšç®ããŸã
çµæãååŸããã®ã¯éåžžã«ç°¡åã§ãïŒ
ãããã³ã«æ¡åŒµã®ããã€ãã®æ©èœ
ãããã³ã«æ¡åŒµã¯ããªãã·ã§ã³ã®ãããã³ã«æ¹åŒã«é¢ãã質åã«å¯ŸããAppleã®äžçš®ã®çããããããªããšæããŸãã çŽç²ãªSwiftãããã³ã«ã«ã¯ããªãã·ã§ã³ã®ã¡ãœãããå«ããããšã¯ã§ããŸããã ããããObjective-Cãããã³ã«ã®ãªãã·ã§ã³ã®ã¡ãœããã«ã¯ãããšãã°ããªã²ãŒãã®ãããªãã®ã«æ £ããŠããŸãã
@protocol MyClassDelegate @optional - (BOOL)shouldDoThingOne; - (BOOL)shouldDoThingTwo @end
Pure Swiftã«ã¯åçã®ãã®ã¯ãããŸããïŒ
ãããŸã§ããã®ãããã³ã«ãæ€èšŒãã人ã¯å šå¡ããããã®æ¹æ³ããã¹ãŠå®è£ ããŠããã¯ãã§ãã ããã¯ããªãã·ã§ã³ã§ãã¹ãŠã®ããªã²ãŒãã¡ãœãããèšå®ããããã©ã«ãã®ã¡ãœããå®è£ ãåªå ããå¯èœæ§ããããšããCocoaã®å§ä»»ã®èãæ¹ãšççŸããŸãã Swift 2ã§ã®ãããã³ã«æ¡åŒµã®åºçŸã«ãããåççãªããã©ã«ãã®åäœããããã³ã«èªäœã§å®çŸã§ããŸãã
æçµçã«ãããã¯Objective-Cã®@optionalãšåãæ©èœãæäŸããŸãããå®è¡æã®å¿ é ãã§ãã¯ã¯ãããŸããã
APIå¯çšæ§ãã§ãã¯
iOSéçºè ãèœã¡èŸŒãŸããå°éçãªåé¡ã®1ã€ã¯ãæ°ããAPIã䜿çšããéã«éåžžã«æ³šæããå¿ èŠãããããšã§ãã ããšãã°ãiOS 8ã§UIStackViewã䜿çšããããšãããšãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããŸãã Objective-Cã®æãéçºè ã¯æ¬¡ã®ãããªã³ãŒããèšè¿°ããŠããŸããã
NSClassFromString(@"UIAlertController") != nil
ããã¯ã UIAlertControllerlã¯ã©ã¹ãååšããå Žåããæå³ããiOS 8以éã§å®è¡ããããã©ããã確èªããæ¹æ³ã§ãã ããããXcodeã¯ãã®ã³ãŒãã®çã®ç®çãç¥ããªãã£ããšããäºå®ã«ããããã®å®è¡ã®æ£ç¢ºæ§ãä¿èšŒããŸããã§ããã 次ã®ãããªã³ãŒããæ瀺çã«èšè¿°ã§ãããããSwift 2ã§ã¯ãã¹ãŠãå€æŽãããŸããã
if #available(iOS 9, *) { let stackView = UIStackView() // ... }
ããžãã¯ã¯#availableæã§çºçããŸããiOS9以éã§å®è¡ããŠãããã©ãããèªåçã«ãã§ãã¯ããå®è¡ããŠããå Žåã¯ã UIStackViewã®ã³ãŒããèµ·åããŸãã ãiOS 9ãã®åŸã«èšå·ã*ããååšãããšããããšã¯ããã®ææ¡ãAppleãå°å ¥ããå°æ¥ã®ãã©ãããã©ãŒã ã«å¯ŸããŠå®è¡ãããããšãæå³ããŸãã
#availableæã¯ãŸã ã elseãããã¯ã«ã³ãŒããæžãæ©äŒãäžãããšããç¹ã§ã泚ç®ã«å€ããŸããããã¯ãããã€ã¹ãiOSããŒãžã§ã³8以åã§ããå Žåã«ãã®ãããã¯ãå®è¡ãããæ°ããAPIã䜿çšãããšèŠåã§ããããã«ãªãããã§ãã ã ããšãã°ã次ã®ãããªãã®ãæžããå ŽåïŒ
if #available(iOS 9, *) { // do cool iOS 9 stuff } else { let stackView = UIStackView() }
...ãã®åŸããšã©ãŒãçºçããŸãïŒ
Xcodeã¯ãå©çšã§ããªãUIStackViewã䜿çšããããšããŠããããšãèªèã ããããçºçããªãããã«ããŸãã ãããã£ãŠãããã®ã¯ã©ã¹ãå©çšå¯èœãããXcodeã«çã®æå³ãäŒããããã«åãæ¿ãããšãã»ãã¥ãªãã£ã«å¯Ÿããå€å€§ãªãµããŒããåŸãããŸããã
äºææ§
Swiftãã€ãŸããã¡ãœãããããããã£ãªã©ãObjective-Cãªã©ã«å ¬éãããã©ãããã©ã®ããã«å ¬éããããã³ã³ãã€ã©ã«äŒããäžé£ã®äºåå®çŸ©ãããã«ãŒã«ãèšè¿°ãããšã ããã«ããã®ããã»ã¹ãå¶åŸ¡ã§ããå°æ°ã®å±æ§ãèªç±ã«äœ¿çšã§ããŸãã ãããã®å±æ§ã¯æ¬¡ã®ãšããã§ãã
- @IBOutletãš@IBActionã䜿çšãããšãSwiftã®ããããã£ãšã¡ãœãããInterface Builderã®ã¢ãŠãã¬ãããšã¢ã¯ã·ã§ã³ãšããŠè§£éã§ããŸãã
- dynamic ãç¹å®ã®ããããã£ã«å¯ŸããŠKVOã䜿çšã§ããŸãã
- @objc㯠ãObjective-Cããã¯ã©ã¹ãŸãã¯ããããã£ãåŒã³åºãå¯èœã«ããããã«äœ¿çšãããŸãã
Swift 2ã¯ãObjective-Cã§ã®ããããã£ãŸãã¯ã¡ãœããã®äœ¿çšãæ瀺çã«é²æ¢ãã@nonobjcãªã©ã®æ°ããå±æ§ãå°å ¥ããŸããã ãã®å±æ§ã¯ãããšãã°æ¬¡ã®å Žåã«éåžžã«åœ¹ç«ã¡ãŸãã Cocoa UIViewControllerã¯ã©ã¹ãç¶æ¿ããViewControllerã¯ã©ã¹ã®Calculatorã¢ããªã±ãŒã·ã§ã³ïŒä»¥äžãåç §ïŒã§ã performOperationãšããåãååã§ç°ãªãåŒæ°ãæã€3ã€ã®ã¡ãœãããå®çŸ©ããŸããã ããã¯æ£åžžã§ãããSwiftã¯ãããã®ã¡ãœãããåºå¥ããããšãã§ããç°ãªãçš®é¡ã®åŒæ°ã«åºã¥ããŠããŸãã ããããObjective-Cã¯ãã®ããã«ã¯æ©èœããŸããã Objective-Cã§ã¯ãã¡ãœããã¯ååã§ã¯ãªãã¿ã€ãã«ãã£ãŠç°ãªããŸãã ãããã®ã¡ãœãããObjective-Cã§äœ¿çšããããã«å ¬éãããŠããå Žåããã®åœ¢åŒã®Objecrive-Cã§ã¯äœ¿çšã§ããªããšãããšã©ãŒã衚瀺ãããŸãã åé¡ã¯ãèšç®æ©ã€ã³ã¿ãŒãã§ã€ã¹çšã«äœæããViewControllerã¯ã©ã¹ãUIViewCiontrollerã¯ã©ã¹ã®Cocoaã¯ã©ã¹ãç¶æ¿ããã³ã³ãã€ã©ããã¹ãŠã®ããããã£ãšã¡ãœããã@objcå±æ§ã§æé»çã«èªåçã«ããŒã¯ããããšã§ãã Objective-Cã§ã¡ãœããã䜿çšããã€ããããªãå Žåã¯ããããã«@noobjcå±æ§ãæå®ããå¿ èŠãããããšã©ãŒãæ¶ããŸãã
.........................
Swift 2ãäºææ§ãæ¹åããããšããŠãããã1ã€ã®åéã¯ãCé¢æ°ãã€ã³ã¿ãŒãšã®äºææ§ã§ãã ãã®æ¹åã®ç®çã¯ãåä»ãªSwiftã®å¶éãä¿®æ£ããããšã§ããããã«ãããã³ãŒã«ããã¯é¢æ°ãéäžçã«äœ¿çšããCore Audioãªã©ã®éèŠãªCãã¬ãŒã ã¯ãŒã¯ãå®å šã«äœ¿çšã§ããªããªããŸãã Swift 1.xã§ã¯ãCé¢æ°ãžã®ãã€ã³ã¿ãŒãSwifté¢æ°ã«çŽæ¥çœ®ãæããããšã¯ã§ããŸããã§ããã CãŸãã¯Objective-Cã§ã³ãŒã«ããã¯é¢æ°ãã«ãã»ã«åããå°ããªãã©ãããŒããäœæããå¿ èŠããããŸããã Swift 2ã§ã¯ãSwift 2ã§ãããå®å šã«èªç¶ãªæ¹æ³ã§è¡ãããšãå¯èœã«ãªããŸããã Cé¢æ°ãžã®ãã€ã³ã¿ãŒã¯ã¯ããŒãžã£ãŒãšããŠSwiftã«ã€ã³ããŒããããŸãã Swift 2ã®ä»»æã®ã¯ããŒãžã£ãŒãŸãã¯é¢æ°ããé©åãªãã©ã¡ãŒã¿ãŒã䜿çšããŠãCé¢æ°ãžã®ãã€ã³ã¿ãŒãäºæããã³ãŒãã«æž¡ãããšãã§ããŸãã1ã€ã®éèŠãªå¶éããããŸããã¯ããŒãžã£ãŒãšã¯å¯Ÿç §çã«ãCé¢æ°ãžã®ãã€ã³ã¿ãŒã«ã¯ãããã£ããã£ããããç¶æ ã®æŠå¿µããããŸããïŒåãªããã€ã³ã¿ãŒã§ãïŒã ãã®çµæãCé¢æ°ãžã®ãã€ã³ã¿ãŒãšã®äºææ§ã®ããã«ãã³ã³ãã€ã©ã¯å€éšã³ã³ããã¹ããããã£ããã£ãããªãSwift 2ã¯ããŒãžã£ãŒã®ã¿ãèš±å¯ããŸãã Swift 2ã¯æ°ãã@èŠçŽÂ©è¡šèšã䜿çšããŠãåŒã³åºãã§ãã®èŠçŽã瀺ããŸãã
ããšãã°ãæšæºã®C qsortãœãŒãé¢æ°ã®å Žåã次ã®ããã«ãªããŸãã
éåžžã«è¯ãäŸãSwiftã®C Callbacksã«ãããŸããããã¯ã CGPathApplyé¢æ°ãåŒã³åºããŠãã³ãŒã«ããã¯é¢æ°ã«ãã€ã³ã¿ãŒãæž¡ãããšã§CGPathãŸãã¯UIBezierPathèŠçŽ ã«ã¢ã¯ã»ã¹ããæ¹æ³ã瀺ããŠããŸãã 次㫠ã CGPathApplyã¯åãã¹èŠçŽ ã«å¯ŸããŠãã®ã³ãŒã«ããã¯ãåŒã³åºããŸãã
次ã«ã ãã¹å šäœã調ã¹ãŠããã®èŠçŽ ã®èª¬æãåºåããŸãã
ãŸãã¯ããã®ãã¹ã«ãã closepathã³ãã³ãã®æ°ãèšç®ã§ããŸã ã
çµè«ãšããŠãSwift 2ã¯ãCé¢æ°ãšã¯ããŒãžã£ãŒãžã®ãã€ã³ã¿ãŒã®äºææ§ïŒããªããžïŒãèªåçã«ä¿èšŒãããšèšãããšãã§ããŸãã ããã«ãããã³ãŒã«ããã¯ãšããŠé¢æ°ãã€ã³ã¿ãŒã䜿çšããå€æ°ã®C APIã§äœæ¥ããããšãå¯èœã«ãªããŸãïŒéåžžã«äŸ¿å©ã§ãïŒã Cé¢æ°ã®åŒã³åºãã«é¢ããèŠåã§ã¯ããããã®ã¯ããŒãžã£ãŒãå€éšç¶æ ãããã£ããã£ãããããšã¯èš±å¯ãããªããããå€ãã®C APIãã³ãŒã«ããã¯ã¯ããŒãžã£ãŒãã¢ã¯ã»ã¹ããå¿ èŠãããå€éšãã€ã³ã¿ãŒãå€éšãã€ã³ã¿ãŒã«æž¡ãå¿ èŠããããŸãã
æ°ããObjective-Cã®æ©èœ
Appleã¯ãããã¹ã ãŒãºãªSwiftäºææ§ã®ããã«ãããã䜿çšããããšãç®çãšããŠãXcode 7ã®Objective-Cã«3ã€ã®æ°æ©èœãå°å ¥ããŸããã
- ãã«å¯èœæ§
- 軜éãžã§ããªãã¯
- __kindofåã
ãã«å¯èœæ§
ãã®æ©èœã¯ãã§ã«Xcode 6.3ã§å°å ¥ãããŸããããObjective-Cã䜿çšãããšãã¡ãœãããããããã£ã®åäœãæ£ç¢ºã«ç¹æ§åããŠã nilã§ãããã©ããã確èªã§ããããã«ãªããŸããã ããã¯ã ãªãã·ã§ã³ãŸãã¯éãªãã·ã§ã³ã®ã¿ã€ãã«å¯ŸããSwiftã®èŠä»¶ã«çŽæ¥å¯Ÿå¿ããObjective-Cã€ã³ã¿ãŒãã§ã€ã¹ãããè¡šçŸåè±ãã«ããŸãã nullabilityã«ã¯3ã€ã®ä¿®é£ŸåããããŸãã
- nullable ïŒCãã€ã³ã¿ãŒã®__nullable ïŒãããã¯ããã€ã³ã¿ãŒãnilã«ããŠã ãªãã·ã§ã³ã®åãšããŠSwiftã«å€æã§ããããšãæå³ããŸã- ïŒ ;
- nonnull ïŒCãã€ã³ã¿ãŒã®å Žåã¯__nonnull ïŒãããã¯ã nilãèš±å¯ãããŠãããã ãªãã·ã§ã³åã§ã¯ãªãSwiftã«å€æãããããšãæå³ããŸãã
- null_unspecified ïŒCãã€ã³ã¿ãŒã®å Žå__null_unspecified ïŒããµããŒããããŠããåäœã«é¢ããæ å ±ã¯ãããŸããã ãã®å Žåããã®ãããªãã€ã³ã¿ãŒã¯èªåçã«ãæ¡åŒµãããããªãã·ã§ã³ãšããŠSwiftã«å€æãããŸã- ïŒ ã
äžèšã®ä¿®é£Ÿåã¯ã次ã®äŸã®ããã«ãObjective-Cã¯ã©ã¹ã«æ³šéãä»ããããã«äœ¿çšã§ããŸãã
ãã®äŸã§ã¯ãè§ãã£ãNS_ASSUME_NONNULL_BEGINããã³NS_ASSUME_NONNULL_ENDã§ããŒã¯ãããé åå šäœãéžæãããŠããããã null以å€ã¯ããã©ã«ãå€ã«ãªããŸãã ããã«ãããéçºè ã¯ããã©ã«ãå€ãšäžèŽããªãèŠçŽ ã®ã¿ã«æ³šéãä»ããããšãã§ããŸãã
軜éãžã§ããªãã¯
Objective-Cã®è»œéãžã§ããªãã¯ã¯ãç¹ã«Appleãšã³ãžãã¢ã«ãšã£ãŠã¯ãéå»10幎éã§Objective-Cã§ééããªãæãæãŸãããã®ã§ãã NSArrayãNSDictionaryãªã©ã®ã³ã¬ã¯ã·ã§ã³ã§äœ¿çšããããã«å¿ èŠã§ããObjective -Cã®ã³ã¬ã¯ã·ã§ã³ã®æ¬ ç¹ã®1ã€ã¯ãSwiftã«ç§»æ€ãããšãã«ã»ãšãã©ãã¹ãŠã®åæ å ±ã倱ãããããšã§ããSwiftã§ã¯ããã©ã«ãã§AnyObjectã³ã¬ã¯ã·ã§ã³ãååŸããããŠã³ãã£ã¹ãã䜿çšããå¿ èŠããããŸããã»ãšãã©ã®å Žåã ãã ããXcode 7ã§ãã®æ¹æ³ã§é åèŠçŽ ã®åã宣èšã§ããŸãã
ãã®å Žåãå¯å€æååã®é åã宣èšããŸãã æ°å€ãæžã蟌ãããšãããšãã³ã³ãã€ã©ã¯åã®äžäžèŽã«é¢ããèŠåãåºããŸãã
NSArrayãNSDictionaryãªã©ã®ã¯ã©ã¹ãè¡šçŸãããšããç¹ã§ãObjective-CãšSwiftã®çžäºéçšæ§ã«è»œéã®ãžã§ããªãã¯ãéåžžã«åœ¹ç«ã€ããšãå€æããŸãããããã¯ãSwiftã³ãŒãã§å€ãã®ããã£ã¹ãããè¡ãå¿ èŠããªãããã§ãããã¹ãŠã®Appleãã¬ãŒã ã¯ãŒã¯ã¯Objective-Cã§äœæãããŠããŸãã
ã»ã ãµããã¥ãŒã¯é å[AnyObject]ã§ã¯ãªãã [UIView]ãšããŠSwiftã«æž¡ãããŸãã
ããã§ãObjective-Cã§ã¯ãç¬èªã®ãžã§ããªãã¯ã¯ã©ã¹ã宣èšã§ããŸãã
ãããŠããã䜿çšãã
ã¿ã€ããäžèŽããªãå ŽåãèŠåãçºè¡ãããŸãã æ®å¿µãªãããç¬èªã®ãžã§ããªãã¯åã䜿çšããããšã¯ãObjective-Cã³ãŒãå ã§ã®ã¿å©ç¹ããããSwiftã§ã¯ç¡èŠãããŸãã ãããã¯ã³ã³ãã€ã©ã¬ãã«ã§ã®ã¿åäœããã©ã³ã¿ã€ã ã§ã¯åäœããŸããã
__kindofå
__kindofåã¯ãžã§ããªãã¯åã§ããããã®å€èŠ³ã¯æ¬¡ã®å Žåã«åæ©ä»ããããŠããŸãã ãåãã®ããã«ã UIViewã¯ã©ã¹ã«ã¯ã ãµããã¥ãŒããããã£ããããŸããããã¯ã UIViewãªããžã§ã¯ãã®é åã§ãã
@interface UIView @property(nonatomic,readonly,copy) NSArray< UIView *> *subviews; @end
ããã¯ã°ã©ãŠã³ãã§æããªã¢ãŒãã®ãµããã¥ãŒãšããŠUIButtonã芪UIViewã«è¿œå ãã UIButtonã«ã®ã¿é¢ä¿ããã¡ãã»ãŒãžãéä¿¡ããããšãããšãã³ã³ãã€ã©ãŒã¯èŠåãåºããŸãã ããã¯è¯ãããšã§ãããããã¯ã°ã©ãŠã³ãã®ãµããã¥ãŒãUIButtonã§ããããšã確å®ã«ç¥ã£ãŠãããã¡ãã»ãŒãžãéä¿¡ããå¿ èŠããããŸãã
[view insertSubview:button atIndex:0]; //-- warning: UIView may not respond to setTitle:forState: [view.subviews[0] setTitle:@"Cancel" forState:UIControlStateNormal];
__kindofåã䜿çšãããšãObjective-Cã®ã¿ã€ãã³ã°ã·ã¹ãã ã«ããçšåºŠã®æè»æ§ãæäŸã§ãããããã¹ãŒããŒã¯ã©ã¹ãšãµãã¯ã©ã¹ã®äž¡æ¹ã®æé»çãªããã£ã¹ãããæ©èœããŸãã
@interface UIView @property(nonatomic,readonly,copy) NSArray< _kindof UIView *> *subviews; @end //-- no warnings here: [view.subviews[0] setTitle:@"Cancel" forState:UIControlStateNormal]; UIButton *button = view.subviews[0];
軜éãžã§ããªãã¯ããã³__kindofåã䜿çšãããšãéçºè ã¯ã»ãšãã©ã®APIã®ã»ãŒã©ãããã§ãid / AnyObjectãåé€ã§ããŸãã ã©ã®ã¿ã€ããæ±ã£ãŠãããã«ã€ããŠã®æ å ±ãæ¬åœã«ãªãå Žåã«ã¯ã IDããŸã å¿ èŠãããããŸããïŒ
@property (nullable, copy) NSDictionary<NSString *, id> *userInfo;
䜿çšæžã¿èšäºãžã®ãªã³ã¯
Swift 2ã®æ°æ©èœ
Swift 2ã®å¥œããªãã®
Swift 2ã®åå¿è åãã¬ã€ã
Swift 2.0ã§ã®ãšã©ãŒåŠç
Swift 2.0ïŒãã£ãŠã¿ãŸããããïŒ
ãããªãã¥ãŒããªã¢ã«ïŒSwift 2ã®æ°æ©èœããŒã4ïŒãã¿ãŒã³ãããã³ã°
æããªããã®ãæãã
Swiftã®æ°æ©èœã®ãã¹ã
Swift 2ã®æ°æ©èœ
Swift 2.0ïŒå¯çšæ§ãã§ãã¯API
Swiftã§é åãã·ã£ããã«ããã«ã¯ã©ãããã°ããã§ããïŒ
Swift 2.0ã·ã£ããã«/ shuffleInPlace
C Callbacks in Swift,
Protocol extensions and the death of the pipe-forward operator
Swift protocol extension method dispatch
API Availability Checking in Swift 2
Interacting with C APIs
What's new in iOS 9: Swift and Objective-C
Xcode 7 Release Notes