Swift 2ã¯ãèšèªèªäœã®æ¹åãObjective-Cãšã®å¯Ÿè©±ãããã³ã³ã³ãã€ã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®æ¹åã«éç¹ã眮ããŠããŸããã
Swift 2ã®æ°æ©èœã¯ã6ã€ã®ç°ãªãé åã§æäŸãããŸãã
- enum ãã¹ã³ãŒãïŒã¹ã³ãŒãïŒãåŒæ°æ§æãªã©ã®åºæ¬çãªèšèªæ§æ
- ãã¿ãŒã³ãããã³ã°
- å¯çšæ§ãã§ãã¯
- ãããã³ã«æ¡åŒµ
- ãšã©ãŒåŠç
- Objective-Cãšã®çžäºäœçš
Swift 2ã®æ°æ©èœã«ã€ããŠã
Githubã«ã³ãŒããèšèŒãããŠ
ãããµã³ãã«ãšãšãã«ç޹ä»ããŸãã
1.åºæ¬çãªèšèªæ§æ
ãã以äžprintlnïŒïŒã¯ãããŸãã
éåžžãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãåºåããã«ã¯
printlnïŒïŒé¢æ°ã䜿çšããŸããã Swift 2ã§ã¯ã
printïŒïŒã®ã¿ã䜿çšã
ãŸã ã Appleã¯
printlnïŒïŒãš
printïŒïŒã®äž¡æ¹ã1ã€ã«çµåããŸããã
printïŒïŒé¢æ°ã¯ãããã©ã«ãã§ã¯ãã\ nãæ¹è¡æåã䜿çšããŠã¡ãã»ãŒãžãå°å·ããŸãã å¿
èŠã«å¿ããŠãæ¹è¡ãªãã§è¡ãå°å·ã§ããŸãã

å°å³ ã ãã£ã«ã¿ãŒ ãäŒç€Ÿ
Swift 1.2ã®ã³ã¬ã¯ã·ã§ã³ãä»ããŠãããã®äŸ¿å©ãªé¢æ°ãšã¡ãœãããå®çŸ©ããããšã¯ãå®å
šã«äžè²«ããŠããŸããã§ããã Swift 1.2ã§ã¯ããããã³ã«ã§ã®ããã©ã«ãã®å®è£
ã¯äžå¯èœã§ãããæ¡åŒµã¯ã¯ã©ã¹ã«å¯ŸããŠã®ã¿è¡ãããããã
CollectionTypeãããã³ã«ã®
ãããã¡ãœããã®ããã©ã«ãã®å®è£
ã¯ãããŸããã§ããã ãããã£ãŠãéšåçã«ã¯ã
mapã¯
Arrayã¯ã©ã¹ïŒ
CollectionTypeãããã³ã«ãå®è£
ããïŒã®ã¡ãœãããšããŠå®çŸ©ããã
Setã¯ã©ã¹ïŒ
CollectionTypeãããã³ã«ãå®è£
ããïŒã§ã¯å®çŸ©ãããŠããŸããã ããã«å ããŠãã°ããŒãã«
ããã颿°ã宣èšãããŸãããããã¯ãæåã®ãã©ã¡ãŒã¿ãŒãšããŠ
CollectionTypeã®ã€ã³ã¹ã¿ã³ã¹ãåããŸããã ããã«ããå®å
šãªæ··ä¹±ãçããŸããã
// Swift 1.2 let a: [Int] = [1,2,3] // map Array let b = a.map{ $0 + 1 } // map map([1,2,3]) { $0 + 1 } let set = Set([1,2,3]) // , map Set set.map{ $0 + 1 } // map Set map(set) { $0 + 1 }
ã³ã¬ã¯ã·ã§ã³ã®ã¿ã€ãã«å¿ããŠããã®ã³ã¬ã¯ã·ã§ã³ã®ã°ããŒãã«
ããã颿°ãŸãã¯
ãããã¡ãœããã®ããããã䜿çšãããããšã倿ããŸããã
map ã
filterãããã³
reduceã¡ãœãããšé¢æ°ã䜿çšããŠäžé£ã®å€æã䜿çšãããšãäžè²«æ§ããªãèªã¿ã«ãããªããŸãã
Swift 2ã§ã¯ããããã³ã«æ¡åŒµãèš±å¯ãããŠããããã
map ã
filter ïŒcoã¯
CollectionTypeã®ãããã³ã«ã¬ãã«ã§ãããã³ã«æ¡åŒµãšããŠå®è£
ãããŠããŸãã ãããã£ãŠãåãã¡ãœããã¯ã
Array ã
SetããŸãã¯
CollectionTypeãããã³ã«ãå®è£
ããä»ã®ã³ã¬ã¯ã·ã§ã³ã§åäœããŸãã
// Swift 2 let a: [Int] = [1,2,3] let b = a.map{ $0 + 1 } let set = Set([1,2,3]) let anotherSet = set.map{ $0 + 1 } let sum = (1...100) .filter { $0 % 2 != 0 } .map { $0 * 2 } .reduce(0) { $0 + $1 } print(sum) // prints out 5000
äžèšã®äŸã§ã¯ã
ãã£ã«ã¿ãŒã
Rangeã§æ©èœããããšãããããŸãã 以åã®ããŒãžã§ã³ã§ã¯ã
Rangeã¯
CollectionTypeãããã³ã«ã確èªããŸãããã
ãã£ã«ã¿ãŒã¡ãœããã¯å®è£
ãããŠããªãã£ããããããã¯æ©èœããŸããã§ããã ããã§ãããããã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠããããã®ã¡ãœããã®æ§æãã¯ããã«çè§£ãããããªããŸããã
åæååæå
Swift 2ã§ã¯ã
enumã«ã¯å°å·ãå¯èœã«ããã®ã«ååãª
åå°æ
å ±ããããŸãã
printïŒanïŒå¥ã¯
Dragonãæ£ããå°å·ããããã«ãªããŸããããSwiftã®ä»¥åã®ããŒãžã§ã³ã§ã¯ãåºåã¯å®å
šã«æçã§ã¯ãããŸããã§ãã
ïŒEnum ValueïŒ ã
enumã«é¢ãããã1ã€ã®æ¹åç¹ã¯ãSwiftã
enumã®ããŸããŸãªã¿ã€ãã®é¢é£ããå€ã®è¡šçŸãèš±å¯ããããã«ãªã£ãããšã§ãã äŸãšããŠãEightã®ã¿ã€ããåæ³çã«æ³åã§ããããã«ãªããŸããã

ããã§ã
enumã¯ååž°çã«ãªããŸããã€ãŸãã
enumã䜿çšããŠããªãŒãæ§ç¯ã§ããŸãã ãã®äŸãèŠãŠã¿ãŸãããïŒ
ã±ãŒã¹Nodeã®åã«
鿥ããŒã¯ãŒãã䜿çšããå¿
èŠããããŸãã ããã«ãããããªãŒãäœæã§ããŸããã

ããã¯æ¬¡ã®ãããªãã®ã§ãã

ããã§ãããªãŒå
šäœãååž°çã«ãã©ããŒã¹ããæ°å€ã远å ãã颿°ãäœæã§ããŸãã

21ã®çµæãå°å·ãããŸãã
蚺æ
ããã«å ããŠãSwift 2ã¯ãäžå€ã®
structã¡ãœããã䜿çšããŠ
varã倿Žããããšããéçºè
ã®è©Šã¿ãæ£ããæ€åºãããåæååŸã«
varããããã£ã倿ŽãããªãããŸãã¯é¢æ°åŒã³åºãã®çµæãç¡èŠããããšããªã©ããªã©
æãåçŽãªå€æŽã®1ã€ã«ãããã³ãŒããèªã¿ããããªããŸãã ãåç¥ã®ããã«ãSwiftéçºè
ã¯
varã䜿çšãã倿°ãšããŠã§ã¯ãªãã
letã䜿çšãã宿°ãšããŠå€ãã®ãã®ã宣èšããããšã奜ã¿ãŸãã ãããã誀ã£ãŠ
varããŒã¯ãŒãã䜿çšããå Žåã¯ã©ããªããŸã
ãïŒ ãŸãã¯ã倿Žããå¿
èŠããããšæããŸãããã倿ŽããŸããã§ãããïŒ Xcode 7ãšSwift 2ã¯ã©ã¡ãããã³ãŒãã®ã©ãã§ããã®å€æ°ã倿ŽããªããšããèŠåã衚瀺ããŸããXcodeã¯ã倿°ã®äœ¿ç𿹿³ãæåéã調ã¹ã倿Žãããã©ããã確å®ã«ææ¡ããŸãã
è€æ°ã®ãªãã·ã§ã³
å€ãã®ãªãã·ã§ã³ã¯å€ãã®ããŒã«å€ãè¡šãæ¹æ³ã§ãããSwift 1.xã§ã¯æ¬¡ã®ããã«ãªããŸããã
viewAnimationOptions = nil viewAnimationOptions = .Repeat | .CurveEaseIn | .TransitionCurlUp if viewAnimationOptions & .TransitionCurlUp != nil { ...
ãã®ã¿ã€ãã®æ§æã¯Cocoaã§åºã䜿çšãããŠããŸããããå®éã«ã¯Cèšèªã®ãéºç©ãã«éããªããããSwift 2ã§ã¯åé€ãããå€ãã®ãªãã·ã§ã³ã«å¯Ÿããç¬èªã®ã¿ã€ãã
æç€ºãããŸããããã¯
OptionSetTypeãããã³ã«ã§ãã

ãã®ãããå€ãã®ãªãã·ã§ã³ã¯ã
SetãŸãã¯
structã®ä»»æã®ã¿ã€ãã«ãªãã
OptionSetTypeãããã³ã«ã確èª
ã§ããŸãã ããã«ãããå€ãã®ãªãã·ã§ã³ã䜿çšããå Žåã®æ§æãããçè§£ãããããªããŸãã

æ§æã¯ã以åã®ããŒãžã§ã³ã®ããã«ãããæŒç®ã«äŸåããã空ã®ãªãã·ã§ã³ã»ããã衚ãããã«
nilã䜿çšããŸããã
çŸåšãå€ãã®
OptionSetTypeãªãã·ã§ã³ã¯ããããã³ã«æ¡åŒµã®ããã©ã«ãå®è£
ãšåŒã°ããSwift 2ã®å¥ã®æ©èœã«äŸåããŠããããã
OptionSetTypeãããã³ã«ã確èªããã ãã§ãããšãã°
containsã¡ãœããã®ããã©ã«ãå®è£
ãååŸã§ããŸãã
minusInPlace ã
unionInPlaceããã³ãã®ä»ã®éåæŒç®ã ãããã³ã«æ¡åŒµã«ã€ããŠã¯ãåŸã§èª¬æããŸãã
颿°ãšã¡ãœãã
颿°ãšã¡ãœããã宣èšããããã®Swift 1.xæ§æã¯ã颿°ãžã®åŒæ°ã«ã©ãã«ããªãCãšãã¡ãœããã®åŒæ°ã«ã©ãã«ãä»ããObjective-CããããããæŽŸçãã2ã€ã®ç°ãªãèŠåããç¶æ¿ãããŸããã ããªãã¯ãã®ãããªå®£èšãæã£ãŠããŸããïŒ
func save(name: String, encrypt: Bool) { ... } class Widget { func save(name: String, encrypt: Bool) { ... } save("thing", false) widget.save("thing", encrypt: false)
Swift 2ã§ã¯ãäžèšã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã

ãããã£ãŠã颿°ã¯ã¡ãœãããšåãèŠåãååŸããŸããã
- æåã®åŒæ°ã®ååã颿°åã«å«ãŸããŠããŸãã
- åŸç¶ã®åŒæ°ã«ã¯ã©ãã«ãä»ããããŸãã
ãã ãããããã®å€æŽã¯ãCããã³Objective-C APIããã€ã³ããŒãããã颿°ã«ã¯é©çšãããŸããã
ããã«ãSwift 1.xã§åãå
éš
åãšå€éš
åãæã€ãã©ã¡ãŒã¿ãŒãæå®ããããã«äœ¿çšãããŠãã
#optionãªãã·ã§ã³ã
åé€ãããããããã©ã¡ãŒã¿ãŒã©ãã«ã宣èšããã¢ãã«ããã䟿å©ã«ãªããŸããã
ã¹ã³ãŒãæŒç®å
æ°ãã
doå¥ã«ãããéçºè
ã¯å€æ°ãšå®æ°ã®ã¹ã³ãŒããæç€ºçã«å®çŸ©ã§ããŸãã ããã¯ããã§ã«å®£èšãããŠããååãåå©çšããå Žåããäžéšã®ãªãœãŒã¹ã®æ©æãªãªãŒã¹ã«åœ¹ç«ã€å ŽåããããŸãã
doå¥ã¯æ¬¡ã®ããã«ãªããŸãã

Swift 1.xã®ä»¥åã®ããŒãžã§ã³ã§å°å
¥ããã
do ... whileç¯ãšã®ãããŸãããé¿ããããã«ãSwift 2ã§ã¯åŸè
ã
repeat ... whileã«ååã倿ŽãããŸããã
ãŠããããã¹ã
Swift 1.xã®åäœãã¹ãã³ãŒãã®åé¡ã¯ãSwift 1.xã䜿çšãã
ãšãåäœãã¹ãã§ç¢ºèªããããã¹ãŠã®ã¿ã°ã
å
¬éããããšã«ãªããŸãã ãã®çµæã
ãããªãã¯ããŒã¯ã¯æ¬æ¥ããã¹ãã§ãªãå Žæã«æ®ããŸãã ããã¯ãã¹ãŠã
ãã¹ãã¿ãŒã²ããã
ã¢ããªã±ãŒã·ã§ã³ ã¿ãŒã²ãããšç°ãªãã
å
éšã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã€ã«ã
ãã¹ãã¿ãŒã²ããã§äœ¿çšã§ããªãããã§ãã
Swift 2ã¯ãåäœãã¹ãã®å€§å¹
ãªè»œæžãéæããŸããã Xcode 7ã¯ãç¹å¥ãªããã¹ããã¢ãŒãã§Swift 2ã³ãŒããèªåçã«ã³ã³ãã€ã«ããŸã

ãã¹ãŠã®
å
éšå®çŸ©ã
publicãšããŠå®çŸ©ãããŠãããã®ããã«ã¢ã¯ã»ã¹ããŸãã ããã¯ãã¢ãžã¥ãŒã«ãã€ã³ããŒããããšãã«
@testable屿§ã䜿çšããŠè¡ãããŸãã

ããã ãã§ååã§ããã
ãããªãã¯ããšããèšèã§ã©ãã«ãä»ããå¿
èŠã¯ãããŸããã
ããã«ããããã®å€æŽã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ãªãªãŒã¹ã«ã¯åœ±é¿ããŸããããããã©ãŒãã³ã¹ãšã¢ã¯ã»ã¹å¶åŸ¡ã®äž¡æ¹ã®ç¹ã§æ£ããåäœãç¶æããŸãã
2.èšç®ã®é åºã®ç®¡ç
Swift 2ã§ã¯ãèšç®é åºã®ç®¡çãšæ¢åã®èšèšã®æ¹åã®ããã®æ°ããæŠå¿µãå°å
¥ãããŠããŸãã
ã¬ãŒããªãã¡ãŒ
ã¬ãŒãå¥ã¯ã
ifå¥ãšåæ§ã«ãæ¡ä»¶åŒã®ããŒã«å€ã«å¿ããŠã³ãŒããå®è¡ããŸãã ããŒã«å€ã
trueã®å Žå ã
ã¬ãŒãå¥ã«ç¶ãã³ãŒãã®å®è¡ãç¶ç¶ããããã«ã
ã¬ãŒãå¥ã䜿çšããŸãã
guardå¥ã¯ãæ¬è³ªçã«
ifå¥ã®éã§ãã ç§ãã¡ãæžã
å Žå ïŒ
if condition { // true } else { // false }
guardã®å Žåã
trueãã©ã³ãã¯
falseãã©ã³ããããé«ãã¬ãã«ã«äžæã
ãŸã ã
guard condition else {
falseãã©ã³ãã¯ãéããã³ã³ããã¹ãã§å®è¡ãçµäºããå€ãè¿ãããšã©ãŒãã¹ããŒããããšã«æ³šæããŠãã ããã æ¡ä»¶ãæºããããå Žåã«ã®ã¿ã
çã®ãã©ã³ãã®ã³ãŒããå®è¡ãããããšãä¿èšŒããŸãã
ããã«ããããã¹ãããã
ifæã«ãã£ãŠåœ¢æããããã¹ã¡ããªãã©ããããã䜿çšããã«ãæ¡ä»¶ãå転ããã«ãèŽåœçã§ãªãåææ¡ä»¶ããã§ãã¯
ããèªç¶ãªæ¹æ³ã
ã¬ãŒãã«ãªããŸãã
åŸæ¥ã®
ifå¥ã䜿çšããå Žåã®å
žåçãªã³ãŒãå®è¡ãã¹ãã©ã®ããã«ãªãããèŠãŠã¿ãŸãããã
jsonDictãã£ã¯ã·ã§ããªã¯
createPersonFromJSON颿°å
¥åã«æäŸãããé¢é£æ
å ±ããã£ã¯ã·ã§ããªã§æäŸãããŠããå Žåã¯
Personæ§é ã®æ£ããã€ã³ã¹ã¿ã³ã¹ãåºåã§äœæãããããã§ãªãå Žåã¯
nilãè¿ãããŸãã ãã®é¢æ°ã¯ãSwift 1.2ã§èŠãããããã«æžãããŠããŸã-if
letæ§æã䜿çšããŸãã ãã®ã³ãŒãã«ã¯ããã€ãã®åé¡ç¹ããããŸãã ãŸããã¡ã€ã³ã³ãŒãããã®æ£ããèšç®ã®æ¹åãããªãã«ããããã€ãŸãããæåãïŒæ¡ä»¶ã®èгç¹ããïŒèšç®ã®æ¹åã
if letå¥ã«ãåã蟌ãŸãããããšã倿ããŸããã 第äºã«ã
createPersonFromJSON颿°
㯠ãå¿
èŠãªãšãã«åžžã«
Personã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããšã¯éã
ãŸããã
Personæ§é ã«ã¯3ã€ã®ããããã£ãå«ãŸããŠããããã®ãã¡ã®1ã€ã¯
Optionalã§ã ããã ãã3ã€ã®ããŒãã¹ãŠã«ã€ããŠèŸæžããé
nilå€ãååŸããå Žåã«ã®ã¿ã颿°ã¯æå¹ãª
Personã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ãã®é¢æ°ã次ã®ããã«æžãæããŸããããã¢ãã¬ã¹ãæ¬ èœããŠããå Žåãã€ãŸã
ã¢ãã¬ã¹ããŒã
nilãè¿ãå Žåã«
Personã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããšãã§ããããã«ããŸãã

æ©èœããããã«æ¹åããŸããã ãã®ããŒãžã§ã³ã®
createPersonFromJSON2颿°ã¯ãã¢ãã¬ã¹ã
nilã§ãã£ãŠã
Personã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããããã«ãªããŸããã ããã¯
Personã®æ§é ãããããåæ ããŠããŸãããçŸåšã§ã¯å€ãã®
ifå¥ãããã
nameãš
ageã«å²ãåœãŠãããæçµå€ãæ¡åŒµããå¿
èŠããããŸãã æ°ãã
ã¬ãŒããªãã¡ãŒã§ãããã©ã®ããã«æ¹åã§ãããèŠãŠã¿ãŸãããã
guardå¥ã®å Žåãããã³
if letå¥ã®
å Žå ãå€ã®ååšã確èªããå€ããå±éãããŠå®æ°ã«å²ãåœãŠãããšãã§ããŸãã ãã ãã
guard letæ§æã䜿çšãããšãæ¡ä»¶åŒã®è©äŸ¡ã
trueã®å Žåãäžæ¬åŒ§
{}ã®åŸã«ã³ãŒãã®å®è¡ãç¶ç¶ãã
ãŸã ã ããã¯ã远å ã®åå²ã³ãŒãã䜿çšããŠå€ãå±éããããšãªãã颿°ã®éåžžã®ã¹ã³ãŒãå
ã«
Personã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããããšãæå³ããŸãã
nameãŸãã¯
ageã®å€ã®ããããã
nilã§ããå Žåãã³ãŒãã¯
elseç¯ã«ãžã£ã³ããã
nilãæ©ãè¿ããŸãã
guardãç°¡åã«èŠãŠã¿ãŸãããã
- å¥ã®ã¬ãŒãå¥ãæºããããŠããå Žåã ã¬ãŒãå¥ã®æ³¢æ¬åŒ§ãéããåŸãã³ãŒãã®å®è¡ãç¶è¡ãããŸãã
- ãã®æ¡ä»¶ãæºããããªãå Žåã elseãã©ã³ãã®ã³ãŒããå®è¡ãããŸãã ifãšã¯ç°ãªãã guardã¯åžžã«> elseãããã¯ãæã¡ãŸãã
- elseç¯ã¯ã return ã break ã continue >ã䜿çšããããå¥ã®é¢æ°ãŸãã¯ã¡ãœãããåŒã³åºãããšã«ããã颿°ã®éåžžã®ã¹ã³ãŒãå€ã§å¶åŸ¡ãæž¡ãå¿
èŠããããŸã
ã
å»¶ææ¡é
deferå¥ã¯ã
tryå¥ã«é¢é£ä»ããããŠããããã©ãã§ã䜿çšã§ããããšãé€ããŠã
æçµçã«ä»ã®ããã°ã©ãã³ã°èšèªã«äŒŒãŠããŸãã
defer {...}ãšã³ãŒãå
ã®ã©ããã«æžããšãèšç®å¶åŸ¡ããã®å²ã¿ã¹ã³ãŒããé¢ãããšãã®ãããã¯ãå®è¡ãããã³ãŒããçµäºãããããªã¿ãŒã³ãåãåãããã¹ããŒããããã¯é¢ä¿ãããŸããããã¹ã deferã¹ããŒãã¡ã³ãã¯ã
ã¬ãŒãããã³ãšã©ãŒåŠçïŒåŸè¿°ïŒã§ããŸãæ©èœããŸãã
guard let file1 = Open(...) else { // file1 return } defer { file1.close() } guard let file2 = Open(...) else { // file2 return } defer { file2.close() } // file1 file2 . . . . . . . // ,
deferã¯ãèšç®ããã»ã¹ã®éåžžã®éçšãš
file2ã§ãšã©ãŒãçºçããå Žåã®äž¡æ¹ã§
file1ã«å¯ŸããŠæ©èœ
ããããšã«æ³šæããŠãã ããã ããã«ãããã³ãŒããã倿°ã®ç¹°ãè¿ããåé€ãããèšç®ãã©ã³ãã§äœãããã¯ãªã¢ãããããšãå¿ããªãããã«ãªããŸãã ãšã©ãŒåŠçãåãåé¡ã«çŽé¢ããŠããããã®ç®çã«ã¯
deferå¥ãæé©ã§ãã
ç¹°ãè¿ã-ãã°ãã
Swift 2.0ã¯ã以åã«äœ¿çšãããŠ
ãã
do-whileç¯ã«æ§æäžã®å€æŽãå ããŸããã
do-whileã®ä»£ããã«ã
repeat-whileãååŸ
ããŸãã

ãããã®å€æŽã«ã¯2ã€ã®çç±ããããŸãã
do-whileã«ãŒãã䜿çšããå Žåããããç¹°ãè¿ãã®æ§æã§ããããšã¯ããã«ã¯ããããŸããã ããã¯ã
doå¥å
ã®ã³ãŒããããã¯ã倧ããã
whileæ¡ä»¶ãç»é¢å€ã«ããå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã ããã軜æžããããã«ã
doããŒã¯ãŒãã¯
repeatã«çœ®ãæããããŸãããããã«ãããããã¯ã³ãŒãã®ç¹°ãè¿ããããã¯ã§ããããšããŠãŒã¶ãŒã«æç¢ºã«ãªããŸãã
doããŒã¯ãŒãã«ã¯ãSwift 2ã®æ°ãããšã©ãŒåŠçã¢ãã«ã«æ°ããç®çããããŸããããã«ã€ããŠã¯åŸã§èª¿æ»ããŸãã
ãã¿ãŒã³ãããã³ã°
Swiftã¯åžžã«åŒ·åãª
ãã¿ãŒã³ãããã³ã°æ©èœãåããŠããŸããããããã¯
ã¹ã€ããã³ã³ã¹ãã©ã¯ãã®ã¿ã§ãã
ã¹ã€ããã³ã³ã¹ãã©ã¯ãã¯å€
valueã調ã¹ãããã€ãã®å¯èœãªãã¿ãŒã³ãšæ¯èŒããŸããã
switchå¥ã®æ¬ ç¹ã®1ã€ã¯ã
valueã®ãã¹ãŠã®å¯èœãªãªãã·ã§ã³ãæäŸããå¿
èŠãããããš
ã§ã ãã€ãŸãã
switchã¹ããŒãã¡ã³ãã¯ç¶²çŸ
çã§ããå¿
èŠããããããã¯äœ¿çšããã®ã«äžäŸ¿ã§ãã ãã®ãããSwift 2ã¯ã以åã¯
ã¹ã€ãã/ã±ãŒã¹ã®ã¿ãæã£ãŠãã
ãã¿ãŒã³ãããã³ã°æ©èœããèšç®ã®æµããå¶åŸ¡ããä»ã®ææ¡ã«ç§»æ€ããŸããã
ã±ãŒã¹ããããã®1ã€ã§ãã
å Žå ã
ã¹ã€ããã䜿çšããŠã³ãŒããããç°¡åã«æžãæããããšãã§ããŸãã ä»ã®ææ¡ã¯
ãã±ãŒã¹ãš
whileã±ãŒã¹çšã§ãã
ã±ãŒã¹ã®å Žåã®ãã¿ãŒã³ãããã³ã°
Swift 2ã®æ°æ©èœã¯ã
if ïŒããã³
guard ïŒå¥å
ã§ã®
ãã¿ãŒã³ãããã³ã°ã®ãµããŒãã§ãã æåã«æãåçŽãªåæäœ
Numberãå®çŸ©ããŠããããã®äœ¿ç𿹿³ã瀺ããŸãããã

1.ç¹å®ã®ã±ãŒã¹ïŒã±ãŒã¹ïŒã®ç¢ºèª
ã±ãŒã¹ã䜿çšããŸããå€ãç¹å®ã®
ã±ãŒã¹ã«äžèŽãããã©ããã確èªããŸãã ãã
ã¯ããã®
ã±ãŒã¹ã«å€
ãé¢é£ä»ããã
ãŠãããã©ããã«ãããããæ©èœããŸãããå€ã¯åŸ©å
ãããŸããïŒååšããå ŽåïŒã

ãµã³ãã«ã¯
case .IntegerValueã§å§ãŸãããã®ãµã³ãã«ãšäžèŽããå€ã§ãã倿°
myNumberã¯çå·ã®åŸã«æ¥ãŸãã ããã¯çŽèгã«åããããã«æãããããããŸãããã
if let a = a1æ§æã®
ãªãã·ã§ã³å€
a1ããæ¡åŒµããããšãã«åãããšãããããŸãããã§ãã¯ããã
a1ã®å€ã¯çå·ã®åŸã«æ¥ãŸãã
ã¹ã€ããã䜿çšããåçã®Swift 1.2ããŒãžã§ã³ã次ã«ç€ºããŸãã

2.é¢é£ããå€ãååŸãã
caseã䜿çšããŸããå€ãç¹å®ã®
caseã«äžèŽãããã©ããã確èªããé¢é£ããå€ãæœåºããŸãã

ããã¿ãŒã³ãã¯ã
ã±ãŒã¹let .IntegerValueïŒtheIntïŒã«å€ãããŸãã ã ããã¿ãŒã³ãã«äžèŽããå€ã¯ãåã®äŸãšåãã§ãã
以äžã¯åãæŠå¿µãåæ ããäŸã§ããã
guardãåç
§ããŠããŸãã
guardãš
ifã®è¿°èªã»ãã³ãã£ã¯ã¹
ã¯åäžã§ããããã
ãã¿ãŒã³ãããã³ã°ã¯åãããã«æ©èœããŸãã

3. whereå¥ã䜿çšããéžæ
guardç¯ã®ã©ã®
å Žåã§ãã远å ã®å¶éãæäŸããããã«ïŒãªãã·ã§ã³ã®ïŒ
whereç¯ã远å ã§ããŸãã åã®äŸã®
getObjectInArrayïŒatIndexïŒé¢æ°ã倿ŽããŠã¿ãŸãããã

4.ãããã³ã°ç¯å²

5.ã¿ãã«ã¿ãã«ã䜿çšãã

6.è¿°èªãè€éãªå Žå
Swift 2ã®ifå¥ã¯é©ãã»ã©æ©èœããŠããŸããã ã«ã³ãã§åºåãããå€ãã®è¿°èªãæã€ããšãã§ããŸãã è¿°èªã¯ã次ã®3ã€ã®ã«ããŽãªã®ããããã«åé¡ãããŸãã
- æãåçŽãªè«çãã¹ãïŒããšãã°ã foo == 10 || bar> baz ïŒã ãã®ãããªè¿°éšã¯1ã€ã ãååšã§ããæåã«é
眮ããå¿
èŠããããŸãã
- ãªãã·ã§ã³ã®å±éïŒäŸïŒ let foo = maybeFoo where foo> 10 ïŒã ãªãã·ã§ã³ã®æ¡åŒµè¿°èªãå¥ã®ãªãã·ã§ã³ã®æ¡åŒµè¿°èªã®çŽåŸã«ç¶ãå Žåã letã¯ã¹ãããã§ããŸãã where修食åã§è¿œå ââã§ããŸãã
- ãã¿ãŒã³ãããã³ã°ïŒäŸïŒ case let .BarïŒsomethingïŒ= theValue ïŒã¯ãäžèšã§æ€èšãããã®ã§ãã where修食åã§è¿œå ââã§ããŸãã
è¿°èªã¯å®çŸ©ãããé åºã§è©äŸ¡ãããè¿°èªãå®è¡ããªããšãæ®ãã¯è©äŸ¡ãããŸããã
ã±ãŒã¹ã®ãã¿ãŒã³ãããã³ã°
ãã¿ãŒã³ äžèŽã¯ã
for -inã«ãŒããšçµã¿åãããŠäœ¿çšââã§ããŸãã ãã®å Žåãç§ãã¡ã®æå³ã¯ãã·ãŒã±ã³ã¹ã®èŠçŽ ãééããããšã§ãããç¹å®ã®ããã¿ãŒã³ãã«å¯Ÿå¿ããèŠçŽ ã®ã¿ãééããããšã§ãã 以äžã«äŸã瀺ããŸãã
switchå¥ã®ããã¿ãŒã³ããšåæ§ã«ãå€ãã®é¢é£ããå€ãæœåºã§ãããã®é¢é£ããå€ã«é¢å¿ããªãå Žåã¯
_ã䜿çšã§ããŸãã å¿
èŠã«å¿ããŠã
whereå¥ã䜿çšããŠå¶éã远å ããããšãã§ããŸãã
ãã¿ãŒã³ãããã³ã°äž
ãã¿ãŒã³ ãããã³ã°ã¯ã
whileã«ãŒãã§ã䜿çšã§ããŸãã ãã®å Žåãè¿°éšã®ç¹å®ã®å€ãããã¿ãŒã³ãã«å¯Ÿå¿ãããŸã§ãã«ãŒãã®æ¬äœãç¹°ãè¿ããŸãã 以äžã«äŸã瀺ããŸãã

ã»ã¯ã·ã§ã³ã6.ãã§èª¬æãããŠããè€éãªè¿°èªã«æ³šæããŠãã ããã
where ifã®äœ¿çšãå«ããè¿°èªã
whileã«ãŒãã§ãµããŒããããŠããå Žåã¯è€éã§ãã
è€æ°ã®ã©ãããè§£é€ããããã®ãã¿ãŒã³
Swift 1.2ã§ã¯ã1ã€ã®ã·ã³ãã«ãª
if letå¥ã§è€æ°ã®
ãªãã·ã§ã³ãããããã€ãããããã®çŽ æµã§ã³ã³ãã¯ããªæ§æããããŸããã
var optional1: String? var optional2: String? if let optional1 = optional1, let optional2 = optional2 { print("Success") } else { print("Failure") }
ããïŒ
ãã ããæ¢åã®/æ¬ èœããŠãã
ãªãã·ã§ã³ã®ãã£ãŒãã³ã°ã®ããŸããŸãªçµã¿åãããæ¬åœã«ç®¡çããå¿
èŠãããç¶æ³ã«çŽé¢ããŠããŸãã ãã®ãããªäŸã®1ã€ã¯ã
ãŠãŒã¶ãŒåãš
ãã¹ã¯ãŒãã®ãã£ãŒã«ãã«
å
¥åããããã®ãã©ãŒã ã§ããããŠãŒã¶ãŒã¯ãããã®ãããããå
¥åããããéä¿¡ããã¿ã³ãã¯ãªãã¯ããŸããã ãã®å Žåãç¹å¥ãªãšã©ãŒã衚瀺ããŠãç¹ã«ã¹ãããããããã®ããŠãŒã¶ãŒã«éç¥ããŸãã ãããè¡ãããã«ãSwift 1.xã§
ãã¿ãŒã³ã¹ã¯ããã³ã°ã䜿çšã§ããŸãïŒ
var username: String? var password: String? switch (username, password) { case let (.Some(username), .Some(password)): print("Success!") case let (.Some(username), .None): print("Password is missing") case let (.None, .Some(password)): print("Username is missing") case (.None, .None): print("Both username and password are missing") }
å°ãåä»ã§ãããæåãã䜿çšããŠããŸããã
Swift 2ã§ã¯ãæ§æã¯ããæç¢ºã«èŠããŸãã

äžèŠãçå笊ã®äœ¿çšã¯ãããã«ãã
ã§ããïŒ å€ãååšããããšã瀺ãããã«ïŒç¹ã«ãå€ãååšããå Žåãšååšããªãå Žåã«
Optionalsã®ã¢ã€ãã¢ã«é¢é£ä»ããããŠããå ŽåïŒããã®äŸã¯äžåšçšãª
.SomeïŒãŠãŒã¶ãŒåïŒæ§æãšã¯å¯Ÿç
§çã«éåžžã«çè§£ããããããšãèªããå¿
èŠããããŸãã
ãšã©ãŒåŠç
ãšã©ãŒåŠçã«é¢é£ããSwiftã®æ°æ©èœãçè§£ããã«ã¯ã颿°ãç°åžžçµäºããå¯èœæ§ããã3ã€ã®æ¹æ³ãããããšãèŠããŠãããšäŸ¿å©ã§ãïŒä»¥éãç°¡æœã«ããããã«ãå°éçšèªã«åãæ¿ããŠããã©ãŒã«ããšèšããŸãïŒã
- å€ãã®é¢æ°ã¯ãããšãã°StringãIntã«å€æããããšããå Žåãªã©ãããªãåçŽãªãåºæã®ãçç±ã§ãã¯ã©ãã·ã¥ãããå¯èœæ§ããããŸãã ãã®ãããªå Žåã¯ããªãã·ã§ã³å€ãè¿ãããšã§ããªãããŸãåŠçãããŸãã
- ã¹ãã¯ãã«ã®ããäžæ¹ã®ç«¯ã«ã¯ãé
åã€ã³ããã¯ã¹ãç¯å²å€ã蚱容ã§ããªãæ¡ä»¶ãªã©ãåŒãèµ·ããè«çããã°ã©ãã³ã°ãšã©ãŒãããããããã«å¯ŸåŠããããšã¯éåžžã«å°é£ã§ããããããã管çããæ¹æ³ã¯ããããŸããã
- 3çªç®ã®ã±ãŒã¹ã¯ãããªã«ã¹ã«ãŒãšã©ãŒãä¿®æ£å¯èœãªãšã©ãŒïŒãã¡ã€ã«ãèŠã€ãããªãããããã¯ãŒã¯ãšã©ãŒãªã©ïŒããŠãŒã¶ãŒãæäœãç Žæ£ããïŒç¶æ³ãšã©ãŒïŒãªã©ã§ãã
ç¶æ³ã«é¢é£ãããšã©ãŒã®ç¬¬äžã®ã¿ã€ãã®å å·¥-ã¹ãŠã£ãã2.ãæ¹åããããšããŠãã颿°ã¯ãåŒæ°ãåä¿¡ãããšããæã
ã¯ã¹ãŠã£ãã1.xããã³Objective-Cã®äžã®å
žåçãªå¶åŸ¡æ¹åŒãã®ãããªãšã©ãŒãèæ
®ããå Žåãæã
ã¯ãã¹ããŒã ãèŠã€ããNSError inoutã®ïŒæäœã®æåãŸãã¯ãšã©ãŒå®äºã衚ãBoolãè¿ããŸãã // error , var error: NSError? // success Bool: let success = someString.writeToURL(someURL, atomically: true, encoding: NSUTF8StringEncoding, error: &error) if !success { // error: println("Error writing to URL: \(error!)") }
ãã®ã¢ãããŒãã«ã¯å€ãã®ãããŒã¯ããªåŽé¢ããããã¡ãœããèªäœãäœãããã®ããæç¢ºã«ããŸããããããã«éèŠãªããšã«ã¯ãè¿ãããBoolã®èåŸã«ãããã®ã«ã€ããŠã¯æåã§èŠçŽãå®è£
ããå¿
èŠããããŸããã¡ãœããããªããžã§ã¯ããè¿ãããšã©ãŒãåãåã£ãå Žåãnilãè¿ããŸããããŒã«å€ã®å Žåãfalseãè¿ãããŸããã©ã®ã¡ãœãããæ±ã£ãŠããããã¡ãœããã«NSErrorãšã©ãŒãªããžã§ã¯ããå«ãŸããŠããå ŽåãçµæãnilãŸãã¯falseãã©ããã確èªããå¿
èŠããããŸããïŒ ã
éåžžã«ãããã«ããæ§æããããã®å°é£ã¯ãã¹ãŠãObjective-Cã颿°ãŸãã¯ã¡ãœããããå€ãã®å€ãè¿ãããšãã§ããªãã£ããšããäºå®ã«é¢é£ããŠããŸãããšã©ãŒã«ã€ããŠãŠãŒã¶ãŒã«éç¥ããå¿
èŠãããå Žåã¯ããã®ãããªåŠçæ¹æ³ãæäŸããŸããSwift 2ã«ã¯æ°ãããã°ç®¡çã远å ãããŸãããNSErrorã眮ãæããdo-try-catchæ§æã䜿çšããŸãããã®æ°ããæ§æã®äœ¿ç𿹿³ãèŠãŠã¿ãŸãããããã®ãããªãšã©ãŒãåŠçããéåžžã«ç°¡åãªäŸãèããŠã¿ãŸãããããããã®ãšã©ãŒã¯ããªãã·ã§ã³ã®è¿åã«ãã£ãŠè¿ãããŸããå€ãããã³æ°ããæ§æã¯å®éã«ã¯æå³ãããŠããŸããããããããã®äŸã®åçŽãã«ãããã»ãã³ãã£ãã¯ã³ã³ãã³ãã®è€éãã§ã¯ãªãããã¹ããŒã¢ãŠããããã³ããã£ããããšã©ãŒã®ã¡ã«ããºã ã«æ£ç¢ºã«æ³šæãåããããšãã§ããŸããæåŸã«ããããã¯ãŒã¯ããã®ããŒã¿ãåŠçããå®éã®äŸã瀺ããŸãããšã©ãŒãã¹ããŒãŸãã¯ãã£ããããåã«ããšã©ãŒãç¹å®ããå¿
èŠããããŸããããªããã§ã¹ãŠã£ãã2ã§ãããå®çŸ©ããããšãã§ããŸãåææ°ãããããã³ã«ã®å®è£
ãERRORTYPEãïŒ
颿°ã«
ã»ïŒã¹ããŒïŒãšã©ãŒãæããããšãã§ããããªãã¯ã颿°ãããã®ããŒã¯ãŒãã§åºåãæ²èŒããå¿
èŠãããã®throwsç¯ïŒ
ä»ããã®æ©èœã¯ãããŒã¯ãŒãã䜿çšããŠããšã©ãŒãã¹ããŒããããšãã§ããŸãæãããããŠããšã©ãŒã®ç¹å®ã®çš®é¡ãžã®ãªã³ã¯ïŒ
ãã®é¢æ°ãåŒã³åºãããããšããå Žåãã³ã³ãã€ã©ã¯ãšã©ãŒãçæããŸããããšåŒã°ãã颿°ããšã©ãŒãã¹ããŒãããããåç
§ããã«ã¯ãããŒã¯ãŒãããŒã¯ãããŠããªã詊ã¿ãããŠäœã®ãšã©ãŒåŠçã¯ãããŸãããã
ã®æ©èœã¯ããšã©ãŒãã¹ããŒããããšãå¯èœã§ããããšãçºè¡šããŸããã®ã§ãæœåšçãªãšã©ãŒãããã£ãããããå¿
èŠããããŸããã¬ããã»ããŒã¯ãŒãã䜿çšããããšè©ŠããŠïŒ
ããã¯ååã§ã¯ãªãã£ããã³ã³ãã€ã©ã¯ãæ§æã䜿çšããŠè£œé ãããå¿
èŠãªãšã©ãŒãã³ããªã³ã°ããšããããšãæããŠãããã-ã®try-catchãïŒ
ãŸãããããã¯ã§è¡ã-ã®try-catchããªãã¯ããã£ãããããæ©äŒãæã£ãŠããããã€ãã®ãšã©ãŒïŒ
ãšã©ãŒã®ã»ãã³ãã£ãã¯éšåã«èå³ããªãå Žåãdo-try-catchã³ã³ã¹ãã©ã¯ãã䜿çšãã代ããã«ãé¢å¿ã®ããå€ããªãã·ã§ã³ãšããŠæ±ãããšãã§ããŸãïŒ
aTryãšaTrySuccessã¯ãªãã·ã§ã³ã§ããç¹å®ã®ç¶æ³ã§ã®ã¿ãèœã¡ããããšãã§ããã¡ãœãããååšããå ŽåããããŸãããäœ¿çšæ¹æ³ã«ãã£ãŠãèœã¡ããããšã¯ãªãããšã¯ç¢ºãã§ãããã®åŸãtryã䜿çšã§ããŸãïŒ ã
颿°ããšã©ãŒããã¹ããŒããããšãããã«æ»ããŸãããã ãã颿°ãæ»ãåã«ãªãœãŒã¹ãè§£æŸããããã¡ã€ã«ãéããããããªã©ãäœããã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿
èŠãããå ŽåããããŸãããã®ç¶æ³ã§ã¯ããã§ã«ããªãã¿ã®ããŒã¯ãŒãdeferãæ£åžžã«æ©èœããŸããããŒã¯ãŒãã§å»¶æé¢æ°ãè¿ãåžžã«å®è¡ãããã³ãŒãã®ãããã¯ãå®çŸ©ãããšããšã©ãŒã«ããæ£åžžãæ»ã£ãŠãããã©ããã¯é¢ä¿ãããŸããå¯èœã颿°ã®ã©ãã«ã§ãdeferãããã¯ãå®çŸ©ã§ããŸããããã«ãè€æ°ã®é
å»¶ãããã¯ãå®çŸ©ããããšãã§ããŸãããã®å Žåããããã¯éã®é åºã§å®è¡ãããŸããäŸãèŠãŠã¿ãŸãããïŒ
Natasha Murashevã®èšäºã§ç޹ä»ãããŠããå®éã®äŸãæ€èšããŸãã Swift 2.0ïŒãã£ãŠã¿ãŸããããïŒ ã
äžéšã®APIããã®ããŒã¿ãèæ
®ããŸãïŒéã·ãªã¢ã«ååŸïŒïŒ
ãã®ããŒã¿ã¯ãã¢ããªã±ãŒã·ã§ã³ã§åŸã§äœ¿çšããããã«ã¢ãã«ã«å€æããå¿
èŠããããŸãïŒTodoItemParser
ããŒãµãŒã¯ãAPIããã®æ··åããŒã¿ãåŠçããã¢ããªã±ãŒã·ã§ã³ã§åŸã§å®å
šã«äœ¿çšã§ããããã«çè§£å¯èœãªã¢ãã«ã«å€æãããšã©ãŒãæ€åºãããšãã¹ããŒããšã©ãŒïŒdo-try-catchã³ã³ã¹ãã©ã¯ãã䜿çšããŠãè¯ããããŒã¿ãã¢ãã«ã«è§£æãããæªããããŒã¿ãè§£æããŸããdo-try-catchã³ã³ã¹ãã©ã¯ãã䜿çšãã代ããã«ãtryã¹ããŒãã¡ã³ãã§èå³ã®ããå€ããªãã·ã§ã³ãšããŠæ±ãããšãã§ããŸããïŒ


ïŒ
æåã®éšåã§ã¯ãSwift 2ã®æ°ããæ©èœã®äžéšã®ã¿ãæ€èšããŸããã- ãïŒã¹ã³ãŒãïŒãåŒæ°æ§æãªã©ã®åºæ¬çãªèšèªæ§é ã-ãã¿ãŒã³ãããã³ã°ïŒãã¿ãŒã³ãããã³ã°ïŒ-ãšã©ãŒåŠçïŒãšã©ãŒåŠçïŒç¬¬äºéšã§ã¯ãæã
ã¯æ®ãã®éšåãèŠãŠãããŸãïŒ-ã¢ãã€ã©ããªãã£ïŒå¯çšæ§å©çšå¯èœãªãã§ãã¯ïŒ-æ¡åŒµæ©èœïŒãšã¯ã¹ãã³ã·ã§ã³ãïŒãããã³ã«-察話ãObjective-Cã®ãšåèæç®äžå€åïŒæ°ã¹ãŠã£ããã«ç¹åŸŽ2 ã¹ãŠã£ãã2ã§ç§ã®ããã¹ãŠã£ãã2ã®Aåå¿è
ã®ããã®ã¬ã€ãã¹ãŠã£ãã2.0ã§ã®ãšã©ãŒåŠçenum
scoping
Swift 2.0: Let's try?Video Tutorial: What's New in Swift 2 Part 4: Pattern MatchingThrow What Don't ThrowThe Best of What's New in Swift