Swiftã§ã®ããã°ã©ãã³ã°æ¹æ³ãæ¢ã«çè§£ããŠããå Žåã¯ãããããSwiftèšèªã®åºæ¬ãšãã¯ã©ã¹ãšæ§é ã®äœææ¹æ³ããã§ã«ç¥ã£ãŠããã§ãããã ããããSwiftã¯ãã以äžã®æ©èœãåããŠããŸãã ãã®èšäºã®ç®çã¯ã
ãžã§ããªãã¯ãšåŒã°ããä»ã®ããã€ãã®èšèªã§ãã§ã«æ®åããŠããSwiftã®éåžžã«åŒ·åãªåŽé¢ã«ã€ããŠè©±ãããšã§ãã
åã«é¢ããŠå®å
šãªããã°ã©ãã³ã°èšèªã䜿çšãããšãããã¯ã1ã€ã®åã®ã¿ã§åäœããã³ãŒããèšè¿°ãããããªäžè¬çãªåé¡ã§ãããå¥ã®åã§ã¯éåžžã«æ£ç¢ºã§ãã ããšãã°ã颿°ã2ã€ã®æŽæ°ã远å ãããšããŸãã 2ã€ã®æµ®åå°æ°ç¹æ°ã远å ãã颿°ã¯éåžžã«ãã䌌ãŠããŸãããå®éã«ã¯åãããã«èŠããŸãã
å¯äžã®éãã¯ã倿°ã®å€ã¿ã€ãã§ãã
匷ãåä»ããããèšèªã§ã¯ãåã
ã®é¢æ°ãaddIntsãaddFloatsãaddDoublesãªã©ãšããŠå®çŸ©ããå¿
èŠããããŸããå颿°ã«ã¯æ£ããåŒæ°ããããåãè¿ããŸãã
å€ãã®ããã°ã©ãã³ã°èšèªã¯ããã®åé¡ã®è§£æ±ºçãå®è£
ããŠããŸãã ããšãã°ãC ++ã¯ãã³ãã¬ãŒãã䜿çšããŸãã SwiftãJavaãšCïŒã®äž¡æ¹ããžã§ããªãã¯ã䜿çšããŠãã-ãããã£ãŠããã®ãã¥ãŒããªã¢ã«ã®ãããã¯ã§ãïŒ
äžè¬åãããSwiftããã°ã©ãã³ã°ã«é¢ãããã®èšäºã§ã¯ãæ¢ã«èŠããã®ãå«ããããã°ã©ãã³ã°èšèªã®æ¢åã®ãžã§ããªãã¯ã®äžçã«é£ã³èŸŒã¿ãŸãã æ¬¡ã«ããŠãŒã¶ãŒã®æ€çŽ¢æ¡ä»¶ã远跡ããã«ã¹ã¿ã ãŠãããŒãµã«ããŒã¿æ§é ã䜿çšããŠãFlickrã§åçæ€çŽ¢ããã°ã©ã ãäœæããŸãã
æ³šïŒ ãã®Swift颿°åããã°ã©ãã³ã°ã®èšäºã¯ãSwiftã®åºæ¬ããã§ã«ç¥ã£ãŠãã人åãã§ãã Swiftã®åºæ¬ã«æ
£ããŠããªãå Žåã¯ãæåã«ä»ã®Swiftãã¥ãŒããªã¢ã«ããã§ãã¯ããããšããå§ãããŸãããžã§ããªãã¯å»è¬åã®ç޹ä»ããªãã¯ãããç¥ããªããããããŸãããããããããžã§ããªãã¯ãSwiftã§åäœããŠããã®ãèŠãããšãããã§ãããã é
åãšèŸæžã¯ãããžãã¹ã«ãããäžè¬çãªã»ãã¥ãªãã£ã®å
žåçãªäŸã§ãã
Objective-Céçºè
ã¯ãåãã³ã¬ã¯ã·ã§ã³å
ã®ç°ãªãã¿ã€ãã®ãªããžã§ã¯ããå«ãé
åãšèŸæžã«æ
£ããŠããŸãã ããã«ããæè»æ§ãåäžããŸãããAPIããè¿ãããé
åãã¹ãã¬ãŒãžçšã§ããããšããåç¥ã§ããïŒ å¥ã®åœ¢åŒã®ããã¥ã¡ã³ãã§ããããã¥ã¡ã³ããŸãã¯å€æ°åãèŠããšç¢ºèªã§ããŸãã ããã¥ã¡ã³ãã®å Žåã§ããå®è¡æã«ã³ã¬ã¯ã·ã§ã³ã®ãšã©ãŒãé²ãæ¹æ³ã¯ãããŸããïŒãšã©ãŒã®ãªãã³ãŒã以å€ã«ã¯ãããŸããïŒïŒã
äžæ¹ãSwiftã«ã¯é
åãšèŸæžããããŸãã Intsé
åã«ã¯Intsã®ã¿ãå«ããããšãã§ããããšãã°Stringãå«ããããšã¯ã§ããŸããã ããã¯ãã³ãŒããèšè¿°ããããšã§ã³ãŒããç»é²ã§ããããšãæå³ããŸããããã«ãããã³ã³ãã€ã©ã¯åãã§ãã¯ãå®è¡ã§ããŸãã
ããšãã°ãObjective-C UIKitã§ã¯ããŠãŒã¶ãŒãã¥ãŒã«åºã¥ããŠã¿ãããåŠçããã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
ãåç¥ã®ããã«ããã®ã¡ãœããã®ã»ããã«ã¯UITouchã€ã³ã¹ã¿ã³ã¹ã®ã¿ãå«ãŸããŠããŸãããããã¯ããã¥ã¡ã³ãã«èšèŒãããŠããããã§ãã ãããããªããžã§ã¯ããä»ã®äœãã«ãªãããšã劚ãããã®ã¯äœããããŸãããéåžžãã»ããå
ã®ã¿ãããUITouchã€ã³ã¹ã¿ã³ã¹ãšããŠææ¡ããŠãããããUITouchãªããžã§ã¯ããšããŠå¹æçã«æ±ãå¿
èŠããããŸãã
çŸæç¹ã§ã¯ãSwiftã«ã¯æšæºã©ã€ãã©ãªã§å®çŸ©ãããŠããã»ããããããŸããã ãã ããã»ããã§ã¯ãªãé
åã䜿çšããå Žåã¯ãäžèšã®ã¡ãœãããæ¬¡ã®ããã«èšè¿°ã§ããŸãã
func touchesBegan(touches: [UITouch]!, withEvent event: UIEvent!)
ããã¯ãtouchsé
åã«UITouchã€ã³ã¹ã¿ã³ã¹ã®ã¿ãå«ãŸããŠããããšã瀺ãããã®ã¡ãœããã䜿çšããã³ãŒããä»ã®ãã®ãæž¡ãããšãããšãã³ã³ãã€ã©ãŒã¯ãšã©ãŒãã¹ããŒããŸãã åãã³ã³ãã€ã©ã«ãã£ãŠèšå®/å®çŸ©ãããã ãã§ãªããUITouchã€ã³ã¹ã¿ã³ã¹ã®èŠçŽ ãèšç®ããå¿
èŠããªããªããŸãïŒ
äžè¬ã«ããžã§ããªãã¯ã¯ã¯ã©ã¹ã®ãã©ã¡ãŒã¿ãŒãšããŠåãæäŸããŸãã ãã¹ãŠã®é
åã¯åãããã«æ©èœããå€ããªã¹ãã«ä¿åããŸãããäžè¬çãªé
åã¯å€ã®ã¿ã€ãããã©ã¡ãŒã¿ãŒåããŸãã é
åã§äœ¿çšããã¢ã«ãŽãªãºã ã¯éåºæã§ã¯ãªãããããã¹ãŠã®ã¿ã€ãã®å€ãæã€ãã¹ãŠã®é
åã§ããããåé¢ã§ããŸãã
ãžã§ããªãã¯ãšãã®å©ç¹ã«é¢ããåºæ¬çãªæ
å ±ãåŸãããã®ã§ãããããç¹å®ã®ã·ããªãªã«å®å
šã«é©çšã§ããŸãã
ãžã§ããªãã¯ã®ä»çµã¿ãžã§ããªãã¯ããã¹ãããã«ã¯ãFlickrã§ç»åãæ€çŽ¢ããã¢ããªã±ãŒã·ã§ã³ãäœæããå¿
èŠããããŸãã
ãã®ãã¥ãŒããªã¢ã«ã®ã¹ã¿ãŒã¿ãŒãããžã§ã¯ãã
ããŠã³ããŒãããããšããå§ã
ãŸã ã éããŠãããã«ã¡ã€ã³ã¯ã©ã¹ã«æ
£ããŸãã Flickrã¯ã©ã¹ã¯Flickr APIãåŠçã§ããŸãã ãã®ã¯ã©ã¹ã«ããAPIã®ããŒã¯ããã«æäŸãããŸãããã¢ããªã±ãŒã·ã§ã³ãæ¡åŒµããå Žåã¯ç¬èªã®ããŒã䜿çšã§ããŸãã ãã¡ãã§è³Œèªã§ã
ãŸã ã
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãã

ãŸã ãŸã ã§ãïŒ æãããªãã§ãã ãããç«ãšäžç·ã«åçãããã«è¡šç€ºãããŸãã
é åºä»ãèŸæžã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒãªã¯ãšã¹ãããšã«ç»åãã¢ããããŒãããææ°ã®æ€çŽ¢ãç»é¢ã®äžéšã«ãªã¹ããšããŠè¡šç€ºãããŸãã
ãããããŠãŒã¶ãŒãåãã¢ã€ãã ã2åæ€çŽ¢ãããšã©ããªããŸããïŒ ã¢ããªã±ãŒã·ã§ã³ãå€ãçµæãæ°ãããªã¹ãã®äžçªäžã«ç§»åããæ°ããçµæã«çœ®ãæããã°ãããšæããŸãã
ããŒã¿æ§é ã«é
åã䜿çšããŠçµæãè¿ãããšãã§ããŸããããžã§ããªãã¯ã調ã¹ãã«ã¯ãæ°ããã³ã¬ã¯ã·ã§ã³ãã€ãŸãé åºââä»ããããèŸæžãäœæããå¿
èŠããããŸãã
å€ãã®ããã°ã©ãã³ã°èšèªãšãã¬ãŒã ã¯ãŒã¯ïŒSwiftãå«ãïŒã§ã¯ãé
åãšã¯ç°ãªããã»ãããšèŸæžã¯é åºãä¿èšŒããŸããã é åºä»ããããèŸæžã¯éåžžã®èŸæžã®ããã«èŠããŸãããç¹å®ã®é åºã§ããŒãå«ãŸããŠããŸãã ãã®æ©èœã䜿çšããŠæ€çŽ¢çµæãä¿åããŸããããã«ãããçµæããã°ããæ€çŽ¢ãããã衚ã®é åºãç¶æãããã§ããŸãã
æ
éã§ãªãå Žåã¯ããŠãŒã¶ãŒããŒã¿æ§é ãäœæããŠãé åºä»ããããèŸæžãåŠçã§ããŸãã ããããããªãã¯å
èŠã®æããããŸãïŒ ä»åŸæ°å¹Žéãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ãããã®ãäœæããããšèããŠããŸãã ãžã§ããªãã¯ã¯çæ³çãªãªãã·ã§ã³ã§ãã
äžæ¬¡ããŒã¿æ§é [ãã¡ã€ã«]ã[æ°èŠ]ã[ãã¡ã€ã«]ã[iOS]ã[ãœãŒã¹]ã[ã¹ãŠã£ãããã¡ã€ã«]ã®é ã«éžæããŠãæ°ãããã¡ã€ã«ã远å ããŸãã [次ãž]ãã¯ãªãã¯ãããã¡ã€ã«ã«OrderedDictionaryãšããååãä»ããŸãã æåŸã«ãäœæãã¯ãªãã¯ããŸãã
ãã®çµæã空ã®Swiftãã¡ã€ã«ãäœæãããæ¬¡ã®ã³ãŒãã远å ããå¿
èŠããããŸãã
struct OrderedDictionary { }
ãããŸã§ã®ãšãããããã¯é©ãããšã§ã¯ãããŸããã ãªããžã§ã¯ãã¯å€ã®ã»ãã³ãã£ã¯ã¹ãæããªããã°ãªããªããããæ§é äœã«ãªããŸãã
泚 ïŒ
èŠããã«ãæå³ã®ã»ãã³ãã£ã¯ã¹ã¯ãããããªãã¯ãªã³ã¯ãã§ã¯ãªããã³ããŒ/貌ãä»ãããšèšãçããæ¹æ³ã§ãã å€ã®ã»ãã³ãã£ã¯ã¹ã«ã¯å€ãã®å©ç¹ããããŸããããšãã°ãäºæããããŒã¿ã倿Žããå¯èœæ§ã®ããã³ãŒãã®å¥ã®éšåãå¿é
ããå¿
èŠã¯ãããŸããã 詳现ã«ã€ããŠã¯ã第3ç« ã®ã¬ãã¹ã³ã ã¯ã©ã¹ãšæ§é ãã§ Swiftãçè§£ããæ¹æ³ãåç
§ããŠãã ãããããã§ããžã§ããªãã¯ã«ããå¿
èŠããããããå¿
èŠãªã¿ã€ãã®å€ãå«ããããšãã§ããŸãã æ§é å®çŸ©ã次ã®ããã«å€æŽããŸãã
struct OrderedDictionary<KeyType, ValueType>
å±±ã«ãã³å
ã®èŠçŽ ã¯ããžã§ããªãã¯åãã©ã¡ãŒã¿ãŒã§ãã KeyTypeãšValueTypeã¯ããèªäœã¯åã§ã¯ãªããæ§é å®çŸ©å
ã®åã®ä»£ããã«äœ¿çšã§ãããã©ã¡ãŒã¿ãŒã«ãªããŸãã çè§£ã§ããªããã°ãè¿ãå°æ¥ã«ãã¹ãŠãæããã«ãªãã§ãããã
é åºä»ãèŸæžãå®è£
ããæãç°¡åãªæ¹æ³ã¯ãé
åãšèŸæžã®äž¡æ¹ãç¶æããããšã§ãã èŸæžã«ã¯ãããŒã¿å€æãšé
åããŒãæ ŒçŽãããŸãã
æ§é å®çŸ©ã«æ¬¡ã®ã³ãŒãã远å ããŸãã
typealias ArrayType = [KeyType] typealias DictionaryType = [KeyType: ValueType] var array = ArrayType() var dictionary = DictionaryType()
ããã¯ã説æãã2ã€ã®ããããã£ãšãæ¢åã®ã¿ã€ãã«æ°ããååãä»ãã2ã€ã®ã¿ã€ããšã€ãªã¢ã¹ã瀺ããŸãã ããã§ã¯ãããã¯ã¢ããã¢ã¬ã€ãšãã£ã¯ã·ã§ããªã®ããããã«ãã¢ã¬ã€ã®ãšã€ãªã¢ã¹ãšãã£ã¯ã·ã§ããªã®ã¿ã€ããæå®ããŸãã ã¿ã€ããšã€ãªã¢ã¹ã¯ãè€éãªã¿ã€ããååŸããã¯ããã«çãååãä»ããã®ã«æé©ãªæ¹æ³ã§ãã
åã®ä»£ããã«ãæ§é å®çŸ©ã®KeyTypeããã³ValueTypeåãã©ã¡ãŒã¿ãŒã䜿çšã§ããããšã«æ³šæããŠãã ããã é
åã¯KeyTypesã®é
åã§ãã ãã¡ãããKeyTypeãªã©ã®ã¿ã€ãã¯ãããŸããã 代ããã«ãSwiftã¯ããžã§ããªãã¯åã®ã€ã³ã¹ã¿ã³ã¹åäžã«ãããããã¿ã€ãã®é åºä»ãèŸæžãŠãŒã¶ãŒã®ããã«ãããæ±ããŸãã
ãã®æç¹ã§ãã³ã³ãã€ã©ãšã©ãŒã«æ°ä»ãã§ãããã
ã¿ã€ããKeytypeãã¯ãããã³ã«ãHashableãã«æºæ ããŠããŸãã
ããã¯ããªãã«ãšã£ãŠé©ããããããŸããã
èŸæžã®å®è£
ãèŠãŠãã ããã
struct Dictionary<KeyType: Hashable, ValueType>
ããã¯ãKeyTypeã®åŸã®ãïŒHashableããé€ããŠãOrderedDictionaryã®å®çŸ©ã«éåžžã«äŒŒãŠããŸãã ã»ãã³ãã³ã®åŸã®Hashableã¯ãKeyTypeã«æž¡ãããåãHashableãããã³ã«ã«æºæ ããå¿
èŠãããããšã瀺ããŸãã ããã¯ããã£ã¯ã·ã§ããªããã®å®è£
ã®ããã«ããŒãããã·ã¥ã§ããå¿
èŠãããããã§ãã
ãã®æ¹æ³ã§ãžã§ããªãã¯åãã©ã¡ãŒã¿ãŒãå¶éããããšã¯éåžžã«äžè¬çã«ãªããŸããã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ããããã®å€ãã©ãåŠçããå¿
èŠããããã«å¿ããŠãEquatableãŸãã¯Printableãããã³ã«ã«é©åããããã«å€ã®ã¿ã€ããå¶éããããšãã§ããŸãã
OrderedDictionary.swiftãéããæ§é å®çŸ©ã次ã®ãã®ã«çœ®ãæããŸãã
struct OrderedDictionary<KeyType: Hashable, ValueType>
ããã¯ãOrderedDictionaryã®KeyTypeãHashableãšäžèŽããå¿
èŠãããããšã瀺ããŠããŸãã ããã¯ãKeyTypeãã©ã®ã¿ã€ãã«ãªã£ãŠããã¡ã€ã³èŸæžã®ããŒãšããŠåãå
¥ããããããšãæå³ããŸãã
ããã§ããã¡ã€ã«ã¯ãšã©ãŒãªãã§ã³ã³ãã€ã«ãããŸãïŒ
ããŒãæå³ããžã£ãºå€ã远å ã§ããªãå Žåã®èŸæžã®äœ¿çšã¯äœã§ããïŒ OrderedDictionary.swiftãéããæ¬¡ã®é¢æ°ãæ§é å®çŸ©ã«è¿œå ããŸãã
ãããã¯ãã¹ãŠãæ°ããæ
å ±ã«æ
£ã芪ããã§ãããã§ãããã ããããæ®µéçã«èŠãŠã¿ãŸãããïŒ
- æ°ãããªããžã§ã¯ãã®æ¿å
¥ã«åœ¹ç«ã€ã¡ãœããinsertïŒ_ïŒforKeyïŒatIndexïŒã«ã¯ã3ã€ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠã§ããç¹å®ã®ããŒã®å€ãšã€ã³ããã¯ã¹ãããŒãšå€ã®ãã¢ãæ¿å
¥ã§ããŸãã ããã«ã¯ããããŸã§èŠãããšããªããããããªãããŒã¯ãŒãããããŸãïŒå€åããŸãã
- ãã®ããŒã«æ¢åã®å€ãæ¢ã«ååšããå Žåã¯ãæ¢åã®å€ãè¿ãèŸæžã€ã³ãã¯ãµãŒã«ããŒãåããŸãã ãã®æ¿å
¥ã¡ãœããã¯ããã£ã¯ã·ã§ããªã®updateValueãšåãåäœãæš¡å£ãããããããŒã®æ¢åã®å€ãä¿æããŸãã
- æ¢åã®å€ãããå Žåãã¡ãœããã䜿çšããå Žåã«ã®ã¿ããã®ããŒã®é
åå
ã®ã€ã³ããã¯ã¹ãæ€çŽ¢ãããŸãã
- æ¢åã®ããŒãæ¿å
¥ã€ã³ããã¯ã¹ã®åã«ããå Žåãæ¢åã®ããŒãåé€ããå¿
èŠããããããæ¿å
¥ã€ã³ããã¯ã¹ãèšå®ããå¿
èŠããããŸãã
- å¿
èŠã«å¿ããŠãé
åãšèŸæžãæŽæ°ããå¿
èŠããããŸãã
- æåŸã«ãæ¢åã®å€ãè¿ããŸãã 颿°ã远å ã®å€ãè¿ããããæ¢åã®å€ãååšããªãå¯èœæ§ãããããã
èŸæžã«å€ã远å ã§ããããã«ãªã£ãã®ã§ãå€ãåé€ããã®ã¯ã©ãã§ããïŒ
OrderedDictionaryã®æ§é å®çŸ©ã«æ¬¡ã®é¢æ°ã远å ããŸãã
ã³ãŒããã¹ãããããšã«ããäžåºŠèŠãŠã¿ãŸãããã
- ããã¯ãæ§é ã®å
éšç¶æ
ã倿Žãã颿°ã§ããããããã£ãŠããã®ããã«èªèããŸãã removeAtIndexãšããååã¯ãArrayã®ã¡ãœããã«å¯Ÿå¿ããŠããŸãã å¿
èŠã«å¿ããŠãã·ã¹ãã ã©ã€ãã©ãªã®APIã®ãã©ãŒãªã³ã°ãæ€èšããããšããå§ãããŸãã ããã«ãããAPIã䜿çšããŠããéçºè
ããã©ãããã©ãŒã äžã§æ°è»œã«æäœã§ããŸãã
- ãŸããã€ã³ããã¯ã¹ããã§ãã¯ããŠãé
åå
ã«ãããã©ããã確èªã§ããŸãã åºæ¬é
åãã蚱容ç¯å²å€ã®ã¢ã€ãã ãåé€ããããšãããšãã©ã³ã¿ã€ã ãšã©ãŒãã¹ããŒãããããããã§ãã¯ã¯ãããå°ãåã«æ€åºããŸãã Claim-Cã§Objective-Cã®ã¹ããŒãã¡ã³ãã䜿çšããå¯èœæ§ããããŸãã assertã¯Swiftã§ãå©çšå¯èœã§ãããåææ¡ä»¶ãæ©èœããªããªã£ãå Žåã«ã¢ããªã±ãŒã·ã§ã³ãçµäºã§ããããã«ãçŸåšãæçµãã«ãã§åææ¡ä»¶ã䜿çšãããŠããŸãã
- 次ã«ãé
åããå€ãåé€ããªãããæå®ãããã€ã³ããã¯ã¹ã®é
åããããŒãååŸããŸãã
- 次ã«ããã®ããŒã®å€ãèŸæžããåé€ããŸããããã«ããã以åã«ååšããŠããå€ãè¿ãããŸãã èŸæžã«ã¯ãã®ããŒã®å€ãå«ãŸããŠããªãå¯èœæ§ããããããremoveValueForKeyã¯è¿œå ã®ãããªã¢ã«ãè¿ããŸãã ãã®å Žåããã£ã¯ã·ã§ããªã«è¿œå ã§ããã¡ãœããã¯ç¬èªã«äœæããæ¿å
¥ïŒ_ïŒ_ïŒforKeyïŒatIndex :)ã®ã¿ã§ããããããã£ã¯ã·ã§ããªã«ã¯ãã®ããŒã®å€ãå«ãŸããããšãããã£ãŠããŸãã ãããã£ãŠã䟡å€ãããããšãç¥ããªããã远å ã®è³æãããã«å
¬éã§ããŸãã
- æåŸã«ãããŒãšå€ãã¿ãã«ã«è¿ããŸãã ããã¯ãæ¢åã®å€ãè¿ãremoveAtIndexé
åãšremoveValueForKeyèŸæžã®åäœãšäžèŽããŠããŸãã
å€ãžã®ã¢ã¯ã»ã¹ããã§ãã£ã¯ã·ã§ããªã«æžã蟌ãããšãã§ããŸããããã£ã¯ã·ã§ããªããèªã¿åãããšã¯ã§ããŸãã-ããã¯ããŒã¿æ§é ã«ã¯åœ¹ã«ç«ã¡ãŸããïŒ ããã§ãèŸæžããå€ãååŸã§ããã¡ãœããã远å ããå¿
èŠããããŸãã
OrderedDictionary.swiftãéããæ¬¡ã®ã³ãŒããå®çŸ©æ§é ã«è¿œå ããé
åãšå€æ°ã®å®£èšã®äžã§èŸæžããã€ã³ãããŸãã
var count: Int { return self.array.count }
ããã¯ãéåžžãã®ãããªããŒã¿æ§é ã«å¿
èŠãªããŒã¿ã§ãããé åºä»ããããèªåœã®æ°ã®èšç®ãããããããã£ã§ãã é
åå
ã®çªå·ã¯åžžã«é åºä»ããããèŸæžã®çªå·ãšäžèŽããããããã¹ãŠãåçŽã«ãªããŸã
次ã«ãèŸæžã®èŠçŽ ã«ã¢ã¯ã»ã¹ããå¿
èŠããããŸãã Swiftã§ã¯ã次ã®ããã«ã€ã³ããã¯ã¹æ§æã䜿çšããŠèŸæžã«ã¢ã¯ã»ã¹ããŸãã
let dictionary = [1: "one", 2: "two"] let one = dictionary[1]
ããã§æ§æã«ç²ŸéããŸããããããããé
åãšèŸæžã«äœ¿çšãããŠããããšãèŠãã ãã§ãããã ç¬èªã®ã¯ã©ã¹ãšæ§é ãã©ã®ããã«äœ¿çšããŸããïŒ å¹žããSwiftã䜿çšãããšãã«ã¹ã¿ã ã¯ã©ã¹ã«ã€ã³ããã¯ã¹åäœãç°¡åã«è¿œå ã§ããŸãã
æ§é å®çŸ©ã®äžéšã«æ¬¡ã®ã³ãŒãã远å ããŸãã
ãã®ã³ãŒãã®æ©èœã¯æ¬¡ã®ãšããã§ãã
- ããã¯ãã€ã³ããã¯ã¹ã®åäœã远å ããã®ãšåãããã«æ©èœããfuncãŸãã¯varã®ä»£ããã«ãindexããŒã¯ãŒãã䜿çšãããŸãã ãã©ã¡ãŒã¿ãŒïŒãã®å Žåã¯ããŒïŒã¯ãè§æ¬åŒ§å
ã«è¡šç€ºããããªããžã§ã¯ããå®çŸ©ããŸãã
- æ·»ãåã«ã¯ãèšç®ãããããããã£ãšåæ§ã«ã¢ã¯ã»ã¹æ¹æ³ãå«ããããšãã§ããŸãã ïŒaïŒgetããã³ïŒbïŒsetã¡ãœããã¯ããããã¢ã¯ã»ã¹æ¹æ³ãå®çŸ©ããããšã«æ³šæããŠãã ããã
- getã¡ãœããã¯ç°¡åã§ãããã®ããŒã®å€ã«ã€ããŠèŸæžãç
§äŒããå¿
èŠããããŸãã èŸæžã®æ·»ãåã¯ãã§ã«è¿œå ã®ãããªã¢ã«ãè¿ããŠããããããã®ããŒã«å€ããªãããšã瀺ãããšãã§ããŸãã
- setã¡ãœããã¯ããè€éã§ãã ãŸããããŒãé åºä»ããããèŸæžã«æ¢ã«ååšãããã©ããã確èªããŸãã ååšããªãå Žåã¯ãã¢ã¬ã€ã«è¿œå ããå¿
èŠããããŸãã æ°ããããŒã¯é
åã®æåŸã«ç§»åããããšããå§ãããŸãããã®ãããå€ã远å ããŠé
åã«è¿œå ããŸãã
- æåŸã«ãæå®ãããããŒã®èŸæžã«æ°ããå€ã远å ããæé»çã«ååãä»ããããnewValue倿°ãä»ããŠæ°ããå€ã«æž¡ããŸãã
ããã§ãéåžžã®èŸæžã§ãããã®ããã«ãé åºä»ããããèŸæžã«ã€ã³ããã¯ã¹ãä»ããããšãã§ããŸãã ç¹å®ã®ããŒã®å€ãååŸã§ããŸãããé
åã®ããã«ã€ã³ããã¯ã¹ã§ã¢ã¯ã»ã¹ããã®ã¯ã©ãã§ããïŒ é åºä»ãããããã£ã¯ã·ã§ããªã§ã©ã®ããã«æ©èœããããèŠãŠãã€ã³ããã¯ã¹ãä»ããŠèŠçŽ ã«ã¢ã¯ã»ã¹ããã®ãããã§ãããã
ã¯ã©ã¹ãšæ§é äœã¯ãããŸããŸãªã¿ã€ãã®åŒæ°ã«å¯ŸããŠè€æ°ã®ã€ã³ããã¯ã¹å®çŸ©ãæã€ããšãã§ããŸãã æ§é å®çŸ©ã®äžéšã«æ¬¡ã®é¢æ°ã远å ããŸãã
subscript(index: Int) -> (KeyType, ValueType) {
ããã¯ããã©ã¡ãŒã¿ã¿ã€ããIntã«ãªã£ãŠããããšãé€ããŠã以åã«è¿œå ããæ·»ãåã«äŒŒãŠããŸããããã¯ããããé
åã®ã€ã³ããã¯ã¹ãåç
§ããããã«äœ¿çšãããã®ã ããã§ãã ãã ããä»åã¯ãæå®ãããã€ã³ããã¯ã¹ãæ ŒçŽããã®ã¯OrderedDictionaryã§ãããããçµæã®åã¯ããŒãšå€ã®ã¿ãã«ã§ãã
ãã®ã³ãŒãã®ä»çµã¿ïŒ
- ãã®æ·»ãåã«ã¯ã²ãã¿ãŒã¡ãœããã®ã¿ããããŸãã é åºä»ããããèŸæžã®ãµã€ãºç¯å²ã«ããã€ã³ããã¯ã¹ãæåã«ãã§ãã¯ããããšã§ãåæ§ã«ã»ãã¿ãŒã¡ãœãããå®è£
ã§ããŸãã
- ã€ã³ããã¯ã¹ã¯é
åå
ã«ååšããå¿
èŠããããŸããããã«ãããé åºä»ããããèŸæžã®é·ããæ±ºãŸããŸãã åææ¡ä»¶ã䜿çšããŠãé åºä»ããããèŸæžã®å€éšã«ã¢ã¯ã»ã¹ããããšããããã°ã©ããŒã«èŠåããŸãã
- ããŒã¯ãé
åããååŸããããšã§èŠã€ããããšãã§ããŸãã
- å€ã¯ãç¹å®ã®ããŒã®èŸæžããååŸããããšã§èŠã€ããããšãã§ããŸãã ç¹°ãè¿ããŸãããæ¡åŒµããã远å ãããªã¢ã«ã®äœ¿çšã«æ³šæããŠãã ãããç¥ã£ãŠããããã«ãèŸæžã«ã¯é
åå
ã®ããŒã®å€ãå«ãŸããŠããå¿
èŠããããŸãã
- æåŸã«ãããŒãšå€ãå«ãã¿ãã«ãè¿ããŸãã
ã¿ã¹ã¯ïŒãã®ã€ã³ããã¯ã¹ã®ã»ãã¿ãŒãå®è£
ããŸãã åã®ã€ã³ããã¯ã¹å®çŸ©ã®ããã«ãã»ããã远å ããŠããå®äºããŸãã
ãã®æç¹ã§ãKeyTypeãIntã®å Žåã¯ã©ããªãã®ãçåã«æããããããŸããã ãžã§ããªãã¯ã¹ã®å©ç¹ã¯ãIntãå«ãããŒãšããŠã®ä»»æã®ããã·ã¥ã¿ã€ãã®å
¥åã§ãã ãã®å Žåãã€ã³ããã¯ã¹ã¯ã©ã®ã€ã³ããã¯ã¹ã³ãŒãã䜿çšããããã©ã®ããã«ç¥ãã®ã§ããïŒ
ããã¯ãã³ã³ãã€ã©ãäœããã¹ãããç¥ãããã«ãããå€ãã®åæ
å ±ãã³ã³ãã€ã©ã«æäŸããå¿
èŠãããå Žæã§ãã åã€ã³ããã¯ã¹ã«ã¯ç°ãªãæ»ãå€ã®åãããããšã«æ³šæããŠãã ããã ãããã£ãŠãããŒå€ã®ã¿ãã«ãèšå®ããããšããŠããå Žåãã³ã³ãã€ã©ã¯é
åã®ãããªæ·»ãåã䜿çšããå¿
èŠãããããšãèªèããŸãã
ã·ã¹ãã ãã¹ãããã°ã©ã ãå®è¡ããŠãã³ã³ãã€ã«æ¹æ³ã䜿çšããã€ã³ããã¯ã¹ã¡ãœãããããã³OrdeââredDictionaryãå
šäœãšããŠã©ã®ããã«æ©èœããããå®éšã§ããããã«ããŸãã
File \ New \ File ...ãã¯ãªãã¯ããiOS \ Source \ PlaygroundãéžæããŠãNextãã¯ãªãã¯ããŠãæ°ãã
PlaygroundãäœæããŸãã ODPlaygroundãšããååãä»ããŠã[äœæ]ãã¯ãªãã¯ããŸãã
OrderedDictionary.swiftãã³ããŒããŠãæ°ãããã¬ã€ã°ã©ãŠã³ãã«è²Œãä»ããŸãã æ®å¿µãªããããã®ã¬ãã¹ã³ãæžããŠããæç¹ã§ã¯ããµã€ãã¯ã¢ããªã±ãŒã·ã§ã³ã¢ãžã¥ãŒã«ã®ã³ãŒãããèŠããããšãã§ããªãããããããè¡ãå¿
èŠããããŸãã
æ³šïŒ ããã§å®è£
ãããŠããã³ããŒ/貌ãä»ãã¡ãœãããé€ããããã«ã¯åé¿çããããŸãã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãããã¬ãŒã ã¯ãŒã¯ã«ç§»åããå ŽåãKorin KrichãææããŠããããã«ãPlaygroundã¯ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸããæ¬¡ã®ã³ãŒãããã¬ã€ã°ã©ãŠã³ãã«è¿œå ããŸãã
var dict = OrderedDictionary<Int, String>() dict.insert("dog", forKey: 1, atIndex: 0) dict.insert("cat", forKey: 2, atIndex: 1) println(dict.array.description + " : " + dict.dictionary.description) var byIndex: (Int, String) = dict[0] println(byIndex) var byKey: String? = dict[2] println(byKey)
ãµã€ãããŒïŒãŸãã¯è¡šç€º\ã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒ\ã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒã®è¡šç€ºïŒã§ãåºå倿°printlnïŒïŒã確èªã§ããŸãã

ãã®äŸã§ã¯ããã£ã¯ã·ã§ããªã«ã¯IntããŒããããŸããããã¯ãã³ã³ãã€ã©ã䜿çšããã€ã³ããã¯ã¹ã決å®ãã倿°ã®ã¿ã€ããèæ
®ããããã§ãã byIndexã¯ïŒIntãStringïŒã¿ãã«ã§ãããããã³ã³ãã€ã©ã¯ãäºæ³ãããæ»ãå€ã®åã«äžèŽããæ·»åé
åã¹ã¿ã€ã«ã®ã€ã³ããã¯ã¹ããŒãžã§ã³ã䜿çšããå¿
èŠãããããšãèªèããŠããŸãã
åäžã®byIndexãŸãã¯byKey倿°ããããŒã¿åå®çŸ©ãåé€ããŠãã ããã ã³ã³ãã€ã©ãšã©ãŒã衚瀺ãããŸããããã¯ãã³ã³ãã€ã©ã䜿çšããæ·»ãåãèªèããŠããªãããšã瀺ããŸãã
ãã³ãïŒ åæšè«ãå®è¡ããã«ã¯ãã³ã³ãã€ã©ã¯åŒã®åãäžæã§ããå¿
èŠããããŸãã åŒæ°ã®ã¿ã€ããåãã§æ»ãå€ã®ã¿ã€ããç°ãªãè€æ°ã®ã¡ãœãããååšããå ŽåãåŒã³åºãåŽã®é¢æ°ã¯åºæã§ãªããã°ãªããŸããã Swiftã«ã¡ãœããã远å ãããšãã¢ã»ã³ããªã«é倧ãªå€æŽãå ããããå¯èœæ§ããããããæ³šæããŠãã ããïŒãã¬ã€ã°ã©ãŠã³ãã§é åºä»ããããèŸæžã詊ããŠããããã©ã®ããã«æ©èœããããçè§£ããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ã«æ»ãåã«ã远å ããŠããåé€ããããŒãšã¿ã€ãã®å€ã倿ŽããŠã¿ãŠãã ããã
ããã§ã泚æããèŸæžã®èªã¿æžããã§ããŸãïŒ ããã¯ãããŒã¿æ§é ã®ç®¡çã«åœ¹ç«ã¡ãŸãã ããã§ãã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšãéå§ã§ããŸãïŒ
ç»åæ€çŽ¢ã®è¿œå ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«æ»ããŸãããã
MasterViewController.swiftãéãã2ã€ã®@IBOutletsã®ããäžã«æ¬¡ã®å€æ°å®çŸ©ã远å ããŸãã
var searches = OrderedDictionary<String, [Flickr.Photo]>()
ããã¯ããŠãŒã¶ãŒãFlickrããåãåã£ãæ€çŽ¢çµæãå«ãé åºä»ããããèŸæžã§ãªããã°ãªããŸããã ã芧ã®ãšãããæååãæ€çŽ¢æ¡ä»¶ãFlickr.Photoé
åããŸãã¯Flickr APIããè¿ãããåçã衚瀺ãããŸãã
éåžžã®èŸæžã®å Žåãšåãæ¹æ³ã§ãããŒãšå€ãå±±æ¬åŒ§ã«åããããšã«æ³šæããŠãã ããããããã¯ããã®å®è£
ã§ã¯KeyTypeããã³ValueTypeåã®ãã©ã¡ãŒã¿ãŒã«ãªããŸããFlickr.Photoã¿ã€ãã«ããªãªããããã®ã¯ãªãããšæããããããŸãããããã¯ãåçãFlickrã¯ã©ã¹å
ã§å®çŸ©ãããã¯ã©ã¹ã§ããããã§ãããã®éå±€ã¯Swiftã®éåžžã«äŸ¿å©ãªæ©èœã§ãããã¯ã©ã¹åãçãä¿ã¡ãªããåå空éãç¶æããã®ã«åœ¹ç«ã¡ãŸãã Flickrã¯ã©ã¹ã®å
éšã§ã¯ãphotoã¯ã©ã¹ã«å±ããPhotoã®ã¿ã䜿çšã§ããŸããããã¯ãã³ã³ããã¹ããã³ã³ãã€ã©ãŒã«ãã®å
容ãäŒããããã§ããæ¬¡ã«ãtableViewïŒ_ïŒnumberOfRowsInSection :)ãšããããŒãã«ãã¥ãŒããŒã¿ãœãŒã¹ã¡ãœãããèŠã€ããŠã次ã®ã³ãŒãã«å€æŽããŸãã func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.searches.count }
ãã®ã¡ãœããã¯ãããŒãã«ã®ã»ã«æ°ã瀺ãé åºä»ãèŸæžã䜿çšããããã«ãªããŸãããæ¬¡ã«ãããŒãã«ãã¥ãŒããŒã¿ãœãŒã¹ã¡ãœããtableViewïŒ_ïŒcellForRowAtIndexPath :)ãèŠã€ããŠã次ã®ããã«å€æŽããŸãã func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
ãã®ã¡ãœããã§è¡ãããšã¯æ¬¡ã®ãšããã§ãã- ãŸããdequeueReusableCellWithIdentifierãUITableViewCellã§ã¯ãªãAnyObjectïŒObjective-Cã®èå¥åïŒã«æ»ããããUITableViewãããã¥ãŒããã»ã«ãéžæããUITableViewCellã«çŽæ¥éä¿¡ããŸããããããå°æ¥ãAppleã¯APIãæžãçŽããŠããžã§ããªãã¯ãå©çšã§ããããã«ããŸãïŒ
- 次ã«ãäœæããã€ã³ããã¯ã¹ã®æ·»ãåã䜿çšããŠãæå®ããè¡ã®ããŒãšå€ãååŸããŸãã
- æåŸã«ãããã¹ããã»ã«ã®ãã¡ã»ããã«ã€ã³ã¹ããŒã«ããã»ã«ãè¿ããŸãã
ã§ã¯ããè©°ãç©ãã«ã€ããŠè©±ããŸããããUISearchBarDelegateæ¡åŒµæ©èœãèŠã€ããŠã次ã®ããã«åäžã®ã¡ãœããã倿ŽããŸãã func searchBarSearchButtonClicked(searchBar: UISearchBar!) {
ãã®ã¡ãœããã¯ããŠãŒã¶ãŒã[æ€çŽ¢]ãã¿ã³ãã¯ãªãã¯ãããšåŒã³åºãããŸãããã®ã¡ãœããã§è¡ãããããšã¯æ¬¡ã®ãšããã§ãã- 次ã«ãæ€çŽ¢æ¡ä»¶ãæ€çŽ¢ããŒã®ããã¹ããšããŠä»ããåç
§ããFlickrã¯ã©ã¹ã䜿çšããŠãã®ã¯ãšãªãæ€çŽ¢ããŸããFlickrã®æ€çŽ¢æ¹æ³ã¯ãæ€çŽ¢ã¯ãšãªãšã¯ããŒãžã£ãŒã®äž¡æ¹ã䜿çšããŠãæ€çŽ¢ã®æåãŸãã¯å€±æãå®è¡ããŸããã¯ããŒãºã¯1ã€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ã«é ŒããŸãããšã©ãŒãŸãã¯çµæã®ãªã¹ãã§ãã
- ãšã©ãŒã®å Žåããã®å
åã¯è¡šç€ºãããŸãããããããããªãã¯ãããè¡ãããšãã§ããã®ã§ãããªããæããªãèŠåã衚瀺ãããŸããããªãç©äºãè€éã«ããã®ã§ãããããšã©ãŒã害ãåãŒããªãããšãSwiftã³ã³ãã€ã©ãŒã«éç¥ããã«ã¯ãã³ãŒãã忢ããå¿
èŠããããŸãã
- , SearchResults. , . , .
- , , .
ããããïŒããã§ãã¢ããªã±ãŒã·ã§ã³ãç»åãæ€çŽ¢ããŸãïŒã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããããã€ãã®æ€çŽ¢ãè¡ããŸããæ¬¡ã®ãããªãã®ã衚瀺ã
ããŸãããªã¹ãã®äžçªäžã«ãªãæ€çŽ¢ã®ãããããç¹°ãè¿ããŸãããããŠãããªãã¯åœŒãã©ã®ããã«ãªã¹ãã®äžçªäžã«æ»ãããèŠãã§ãããïŒ
æ€çŽ¢ã®äžã€ãã¯ãªãã¯ããŠã圌ãåçãèŠããªãããšã«æ°ã¥ããŸãããããä¿®æ£ããæãæ¥ãŸããïŒåçããã ããïŒMasterViewController.swiftãéããprepareForSegueã¡ãœãããèŠã€ããŸãããããæ¬¡ã®ãã®ã«çœ®ãæããŸãã override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow() { let (_, photos) = self.searches[indexPath.row] (segue.destinationViewController as DetailViewController).photos = photos } } }
ãã®å Žåãã»ã«ãäœæãããšããšåãæ€çŽ¢æ¹æ³ãé åºä»ããããèŸæžã«äœ¿çšãããŸããããŒïŒããŒã¯ãŒãã«ããæ€çŽ¢ïŒã¯äœ¿çšããŸãããããã®æ¹æ³ã§èªåã§æå®ããããšã«ãããã¿ãã«ã®ãã®éšåã¯ããŒã«ã«å€æ°ã«é¢é£ä»ããããªãããšã匷調ããŸããã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããæ€çŽ¢ãå®è¡ããŠããã¯ãªãã¯ããŸããæ¬¡ã®ãããªãã®ã衚瀺ãããŸãïŒ
ç«ïŒããªãã¯ãã®ãããªåã³ã®ä»£ããã«ãŽããŽã鳎ããããšæããŸãããæ¬¡ã¯ïŒããã§ãšãããããŸãããžã§ããªãã¯ã«ã€ããŠå€ãã®ããšãåŠã³ãŸããïŒããã«ã玢åŒä»ããæ§é ãåææ¡ä»¶ãªã©ãä»ã®è峿·±ãããšãåŠã³ãŸãããGenericsã«ã€ããŠè©³ããç¥ãããå Žåã¯ãSwiftãã¥ãŒããªã¢ã«ã®å
šç« ãåç
§ããå¿
èŠããããŸããã³ãŒãã®éè€ãé¿ããç¹°ãè¿ã䜿çšããããã«ã³ãŒããæé©åããããã«ãå°æ¥ã®ã¢ããªã±ãŒã·ã§ã³ã§ãžã§ããªãã¯ã®å
šæ©èœã䜿çšã§ããããšãé¡ã£ãŠããŸãã質åãã³ã¡ã³ããããå Žåã¯ããã©ãŒã©ã ã®ãã£ã¹ã«ãã·ã§ã³ã«åå ããŠãã ããïŒ