
ã¬ã«ã ãšã¯äœã§ããïŒ
Realmã¯ãiOSïŒSwiftããã³Objective-Cã§å©çšå¯èœïŒããã³Androidçšã®ã¯ãã¹ãã©ãããã©ãŒã ã¢ãã€ã«ããŒã¿ããŒã¹ã§ãã ã¬ã«ã ã¯ãSQLiteããã³Core Dataãããé«éã§é«éã«äœæãããŸããã åªããŠããã ãã§ãªãã䜿ããããã ãã§ãªãããããæ°è¡ã®ã³ãŒãã§å€ãã®ããšãã§ããŸãã ã¬ã«ã ã¯å®å šã«ç¡æã§ãããå¶éãªãã§äœ¿çšã§ããŸãã ã¬ã«ã ã¯ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³çšã«äœæãããŸãããããã¯éå»10幎éã§ã¢ãã€ã«ããŒã¿ããŒã¹ã®é©æ°ã«æ°ä»ããŠããªããããããã¯æ°ãããã®ã§ãã çŸåšãã¢ãã€ã«ããŒã¿ããŒã¹ãæäœããã«ã¯ãSQLiteãŸãã¯SQLiteã䜿çšããã©ãããŒã®1ã€ã®ãªãã·ã§ã³ãããããŸããã ã¬ã«ã ã¯ORMã§ã¯ãªãããã䜿ããããããã«èšèšãããŠãããç¬èªã®æ°žç¶åã¡ã«ããºã ã䜿çšããŠããã©ãŒãã³ã¹ãšé床ãåäžãããŠããŸãã
ãªãã¬ã«ã ãªã®ãïŒ
Realmã¯ä¿¡ããããªãã»ã©é«éã§äœ¿ãããããããŒã¿ããŒã¹ãžã®èªã¿åããŸãã¯æžã蟌ã¿ã«ããããããã¿ã¹ã¯ãå®äºããã®ã«å¿ èŠãªã®ã¯æ°è¡ã®ã³ãŒãã ãã§ãã ããã§ã¯ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§ããŒã¿ããŒã¹ãæäœããéã«Realmã䜿çšããã®ãæè¯ã®éžæã§ãããã¹ãŠã®å©ç¹ãšçç±ãåéããŸãã
- ã€ã³ã¹ããŒã«ãç°¡åïŒããã«ã€ããŠã¯ãRealmã®æäœã«é¢ãã次ã®ã»ã¯ã·ã§ã³ã§è©³ãã説æããŸãã Realmã®ã€ã³ã¹ããŒã«ã¯æ³å以äžã«ç°¡åã§ãã Cocoapodsã®ç°¡åãªã³ãã³ãã䜿çšããŠãRealmãæäœã§ããŸãã
- é«éïŒã¬ã«ã ã¯éåžžã«é«éãªããŒã¿ããŒã¹ã©ã€ãã©ãªã§ãã ã¬ã«ã ã¯SQLiteããã³CoreDataãããé«éã§ãããããã§ã®ãã³ãããŒã¯ã¯ãã®ããã®æè¯ã®èšŒæ ã§ãã
- ã¯ãã¹ãã©ãããã©ãŒã ïŒã¬ã«ã ããŒã¿ããŒã¹ãã¡ã€ã«ã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ãããiOSãšAndroidéã§å ±æã§ããŸãã JavaãObjective-CããŸãã¯Swiftã®ãããã§äœæ¥ããå Žåã§ããããé«ã¬ãã«ã®ã¢ãã«ã䜿çšããŸãã
- ã¹ã±ãŒã©ãã«ïŒã¢ããªã±ãŒã·ã§ã³ãå€æ°ã®ãŠãŒã¶ãŒãšå€æ°ã®ã¬ã³ãŒãã§åäœããå Žåãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«ã¹ã±ãŒã©ããªãã£ãèæ ®ããããšãéåžžã«éèŠã§ãã ããŒã«ãèšèšããã³éžæãããšãã¯ãæåãããããæ€èšããå¿ èŠããããŸãã ã¬ã«ã ã¯ã¹ã±ãŒã©ããªãã£ãåããŠããã倧éã®ããŒã¿ãæçæéã§åŠçããŸãã Realmã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®é床ãšã¹ã ãŒãžã³ã°ãåäžããŸãã
- ååã«ææžåãããåªãããµããŒãïŒ RealmããŒã ã¯ãRealmã«é¢ããŠèªã¿ããããããæŽçãããææžãæäŸããŸããã åé¡ãããå Žåã¯ãTwitterãGithubããŸãã¯Stackoverflowãä»ããŠé£çµ¡ã§ããŸãã
- ä¿¡é Œæ§ïŒ Realmã¯ãPinterestãDubsmashãHipmunkãªã©ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äŒæ¥ã§äœ¿çšãããŠããŸãã
- ç¡æïŒããããã¹ãŠã®ãã°ãããæ©èœãåããRealmã¯å®å šã«ç¡æã§ãã
ããå§ããŸããã
ã¬ã«ã ãå§ããŸããããããã䜿çšããŠãSwiftã䜿çšããŠç°¡åãªiPhoneã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ãã¢ãããžã§ã¯ãã¯ãåçŽãªTodoã¢ããªã±ãŒã·ã§ã³ã«ãªããŸãã ãŠãŒã¶ãŒã¯ã¿ã¹ã¯ãã¿ã¹ã¯ãªã¹ãã«è¿œå ã§ããŸããåãªã¹ãã«ã¯è€æ°ã®ã¿ã¹ã¯ãå«ããããšãã§ããŸãã ã¿ã¹ã¯ã«ã¯ãå®äºããŸãã¯ãã®éã瀺ãã¿ã€ãã«ãã¡ã¢ãæ¥ä»ãç»åãããŒã«å€ããããŸãã Xcodeã§ãããžã§ã¯ãã®äœæ¥ãéå§ããåã«ã æåã«Xcodeãèšå®ããRealmã§äœæ¥ããããã«å¿ èŠãªããŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
å¿ èŠæ¡ä»¶
次ã®èŠä»¶ãèæ ®ããŠãã ããã
- iOS 8以éãOS X 10.9以éã
- Xcode 6.3以éã
- ã¬ã«ã ã«ã¯ãSwift 2.0çšãšSwift 1.2çšã®2ã€ã®ããŒãžã§ã³ããããŸãã Swift 2.0ã«ã¯Realmã䜿çšããããšããå§ãããŸãã Swift 1.2ã§äœ¿çšã§ããŸãããä»åŸRealmããŒã ã§ãµããŒããããªããªããããã»ãã¥ãªãã£ã«ã¯Swift 2.0ã䜿çšããããšããå§ãããŸãã
Xcodeãšå¿ èŠãªããŒã«ãæ§æãã
Xcodeã§ãããžã§ã¯ããèšå®ããåã«ãXcodeãããžã§ã¯ãã«Realmãã€ã³ã¹ããŒã«ããããã«äœ¿çšãããããã³ã³ãã¥ãŒã¿ãŒã«CocoaPodsãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããã CocoaPodsã«æ £ããŠããªãå Žåã¯ãããã€ãã®ãªã³ã©ã€ã³ã¬ã€ããèªã¿ãéå§ããããã®è©³çŽ°ãåŠãã§ãã ããã
次ã«ããã·ã³ã°ã«ãã¥ãŒã¢ããªã±ãŒã·ã§ã³ããã³ãã¬ãŒãã䜿çšããŠXcodeã§æ°ãããããžã§ã¯ããäœæãããRealmTasksããªã©ã®ååãä»ããŸãã éçºèšèªãšããŠSwiftãéžæãããŠããããšã確èªããŠãã ããã 次ã«ãã¿ãŒããã«ã®ãããžã§ã¯ããã£ã¬ã¯ããªã«ç§»åãã次ã®ã³ãã³ããå®è¡ããŠCocoaPodsãåæåããŸãã
pod init
次ã«ãXcodeããã°ã©ã ã«ãã£ãŠçæãããããããã¡ã€ã«ãéããŠç·šéããã¿ãŒã²ããã®çŽåŸã«ããããRealmSwiftããè¿œå ããŸãããããã£ãŠã次ã®ããã«ãªããŸãã

次ã«ããpod installãã³ãã³ããå®è¡ããŠãã¬ã«ã ããããžã§ã¯ãã«ããŒãããŸãã å®äºãããšããããžã§ã¯ããã¡ã€ã«ã®æšªã«Xcodeçšã®æ°ããã¯ãŒã¯ã¹ããŒã¹ãäœæãããŸãã xcodeprojãéãå¿ èŠããªããªã£ãRealmTasks.xcworkspaceã¯ãŒã¯ã¹ããŒã¹ãéããŠãã ããã ã¯ãŒã¯ã¹ããŒã¹ãéããšã次ã®ãããªãã®ã衚瀺ãããŸãã

Xcodeã¯Realmãšé£æºããæºåãã§ããŸããããRealmãšã®é£æºãããã«ç°¡çŽ åããã«ã¯ãããã«ããã€ãã®ããŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
Xcodeçšã®Realmãã©ã°ã€ã³ã®ã€ã³ã¹ããŒã«
RealmããŒã ã¯ãRealmã¢ãã«ã®äœæã«äœ¿çšã§ããéåžžã«äŸ¿å©ãªXcodeãã©ã°ã€ã³ãæäŸããŠããŸãã ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããã«ã¯ã Alcatrazã䜿çšããŸãã ã¢ã«ã«ãã©ãºãäœã§ããããç¥ããªã人ã«ãšã£ãŠãããã¯ãã©ã°ã€ã³ãXcodeã®ãã³ãã¬ãŒããèªåçã«ã€ã³ã¹ããŒã«ããããã®éåžžã«ã·ã³ãã«ã§äŸ¿å©ãªãªãŒãã³ãœãŒã¹ããã±ãŒãžãããŒãžã£ãŒã§ãã Alcatrazãã€ã³ã¹ããŒã«ããã«ã¯ãã¿ãŒããã«ã«æ¬¡ã®ã³ãã³ãã貌ãä»ããŠããXcodeãåèµ·åããŸãã
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/master/Scripts/install.sh | sh
次ã«ãXcodeã§ã[ãŠã£ã³ããŠ]ãéžæãã次ã®ç»åã®ããã«[ããã±ãŒãžãããŒãžã£ãŒ]ãéžæããŸãã

次ã«ããããã¢ãããŠã£ã³ããŠãéããXcodeçšã«ã€ã³ã¹ããŒã«ãããã©ã°ã€ã³ãŸãã¯ãã³ãã¬ãŒããéžæããæ€çŽ¢ããŒã§ãã©ã°ã€ã³ãŸãã¯ãã³ãã¬ãŒããæ€çŽ¢ããŠXcodeãæ§æã§ããŸãã æ€çŽ¢ããŒã«ãRealmããšå ¥åãããšããRealmPluginããã©ã°ã€ã³ã衚瀺ããã[ ã€ã³ã¹ããŒã« ] ãã¯ãªãã¯ããŸã ã

ã¬ã«ã ãã©ãŠã¶
æåŸã«èšåãããããŒã«ã¯ãRealmãã©ãŠã¶ã§ãã ãã®ãã©ãŠã¶ã¯ã.realmããŒã¿ããŒã¹ãã¡ã€ã«ã®èªã¿åããšç·šéã«åœ¹ç«ã¡ãŸãã ãããã®ãã¡ã€ã«ã¯ãããŒã¿ããŒã¹ããŒãã«å ã®ãšã³ãã£ãã£ãå±æ§ãããã³ã¬ã³ãŒãã«é¢ãããã¹ãŠã®æ å ±ãšãšãã«ã¢ããªã±ãŒã·ã§ã³ã§äœæãããŸãã ãããã®ãã¡ã€ã«ã¯ãiOSãAndroidãªã©ã®ç°ãªããã©ãããã©ãŒã éã§å ±æã§ãããšæ¢ã«è¿°ã¹ãŠããŸãã ã¹ã³ãŒããã©ãŠã¶ããŒã«ãããŠã³ããŒãããã«ã¯ãiTunesã¹ãã¢ã«ã¢ã¯ã»ã¹ããŠææ°ããŒãžã§ã³ãããŠã³ããŒãããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ãéãã[ããŒã«]-> [ãã¢ããŒã¿ããŒã¹ã®çæ]ãéžæããŸãã ããã«ããããã¹ãã¬ã«ã ããŒã¿ããŒã¹ãã¡ã€ã«ãäœæããããã©ãŠã¶ã䜿çšããŠãã®å 容ãéããŠè¡šç€ºã§ããŸãã ãã¢ããŒã¿ããŒã¹ãéããšã次ã®ããã«ãªããŸãã

RealmTestClass1ã¯ã©ã¹ã§ãããããã«ã1000ã®ã¬ã³ãŒããããããã®ã¯ã©ã¹ã®ããŸããŸãªã¿ã€ãã®ãã©ã¡ãŒã¿ãŒïŒåïŒã瀺ããŠããŸãã 次ã®ã»ã¯ã·ã§ã³ã§ããµããŒãããããã£ã®ã¿ã€ãã«ã€ããŠèª¬æããŸãã
ããã§ãRealmã䜿çšããæºåãæŽããŸããã å§ããŸãããã
ããŒã¿ããŒã¹ã®ã¢ãã«ã¯ã©ã¹
ããã§ã²ãŒã ãå§ãŸããŸããïŒ æåã«ãã¢ãã«ã¯ã©ã¹ãŸãã¯ããŒã¿ããŒã¹ãäœæããŸãã Realmã§ã¢ãã«ã¯ã©ã¹ãäœæããã«ã¯ããªããžã§ã¯ãã®ã¯ã©ã¹ãæ¡åŒµããéåžžã®Swiftã¯ã©ã¹ãäœæããã ãã§ãã ãªããžã§ã¯ãã¯ãã¬ã«ã ã¢ãã«ã®ãã¹ãŠã®ã¯ã©ã¹ã®åºæ¬ã¯ã©ã¹ãšèããŠãã ãããæåŸã«ãªããžã§ã¯ããæ¡åŒµããã¯ã©ã¹ãæ¡åŒµããããšãã§ããŸãã ã¯ã©ã¹ãäœæããããããããã£ãå¿ èŠã«ãªããŸãã ã¬ã«ã ã¯ã次ã®ãããªããŸããŸãªã¿ã€ãã®ããããã£ããµããŒãããŠããŸãã
â Int, Int8, Int16, Int32, and Int64 â Boolean â Float â String â NSDate â NSData â Class Object - ' ' â List <Object> - ' '
ãªã¹ãã«ã¯ãRealmã¯ã©ã¹ã®ããã«ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã®ã³ã¬ã¯ã·ã§ã³ãå«ãŸããŸãããã¢ããŒã¿ããŒã¹ã®ã¹ã¯ãªãŒã³ã·ã§ãããåç §ããŠãã ãããæåŸã®åã¯ãå¥ã®ããŒãã«ã®æ¢åã®ã¬ã³ãŒããžã®ãã€ã³ã¿ãŒã®é åã«ãããŸããã Realmã¯ã©ã¹ã䜿çšããå Žåãä»ã®Swiftã¯ã©ã¹ãšåæ§ã«ãRealmã¯ã©ã¹ã«å¯ŸåŠã§ããããšãç¥ã£ãŠããå¿ èŠããããŸãã ããšãã°ãã¡ãœããããããã³ã«ãè¿œå ããŠãä»ã®Swiftã¯ã©ã¹ãšåæ§ã«äœ¿çšã§ããŸãã
ãã£ãã-ããã°ãæããªãã§ãã³ãŒããèŠããŠãã ããïŒ
ã§ã¯ãXcodeã«ã€ã³ã¹ããŒã«ããRealmãã©ã°ã€ã³ã䜿çšããŠãRealmã¯ã©ã¹ãäœæããŸãããã Xcodeã«ç§»åããŠãæ°ãããã¡ã€ã«ãäœæããŸãã å³åŽã®ãµã€ãããŒã§ã[ã¬ã«ã ]ãéžæããŸãã

次ã«ããSwiftããéžæããã¯ã©ã¹åã«ãã¿ã¹ã¯ããšå ¥åããŸãã 次ã®ãããªãã®ã衚瀺ãããŸãã

Taskã¯ã©ã¹ã¯ãæ°ããããããã£ãè¿œå ããæºåãã§ããŸããã
ããããã£
ãã¡ãããTaskã¯ã©ã¹ã«ããããã£ãè¿œå ããå¿ èŠããããŸãã ã¿ã¹ã¯ã«ã¯ãååïŒStringïŒãcreatedAtïŒNSDateïŒãnotesïŒStringïŒãisCompletedïŒBoolïŒããããŸãã ããããã£ãè¿œå ãããšãã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
class Task: Object { dynamic var name = "" dynamic var createdAt = NSDate() dynamic var notes = "" dynamic var isCompleted = false // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } }
Taskã¯ã©ã¹ã®ããããã£ãè¿œå ãããã¹ãŠã®ããããã£ã«varãã¬ãã£ãã¯ã¹ãè¿œå ããŸããã
次ã«ãã¿ã¹ã¯ãä¿åããããã«äœ¿çšãããTaskListã¯ã©ã¹ãäœæããŸãããã
class TaskList: Object { dynamic var name = "" dynamic var createdAt = NSDate() let tasks = List<Task>() // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } }
TaskListã¯ã©ã¹ã«ã¯ãcreatedAtãšList-ã¿ã¹ã¯ã®ãªã¹ããšããååããããŸãã ããã«ã³ã¡ã³ãããããŸãïŒ
- TaskListã«ã¯å€ãã®ã¿ã¹ã¯ãããããããªã¹ã<Object>ã¯1察å€ã®é¢ä¿ã«äœ¿çšãããŸãã
- ãªã¹ãã¯ãã¡ãœããã§äœæãããé åã«éåžžã«äŒŒãŠãããã€ã³ããã¯ã¹ä»ãæ·»ãåå€æã䜿çšããŠãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããŸãã ãªã¹ããèŠããšãããããã«ããªã¹ãã¯ã¿ã€ããããŠããããã¹ãŠã®ãªããžã§ã¯ãã¯åãã¿ã€ãã§ãªããã°ãªããŸããã
- ãªã¹ã<T>ã¯ãŠãããŒãµã«ããŒã¿ã¿ã€ãã§ãããã¿ã¹ã¯ããããã£ã宣èšããåã«åçããããã£ãè¿œå ããªãã£ãã®ã¯ãã¿ã¹ã¯ã®å®è¡æã«ãŠãããŒãµã«ããããã£ãObjective-Cã§è¡šãããšãã§ããªãããã§ãã
Realmã§ã®ãªã¬ãŒã·ã§ã³ã·ããã®äœæã¯ã1察å€ãªã¬ãŒã·ã§ã³ã·ããã®ä»¥åã®å®è£ ã§èŠãããã«éåžžã«ç°¡åã§ãã ãŸãããªã¹ãã§ã¯ãªã1察1ã®é¢ä¿ã«ã€ããŠè¿°ã¹ãããã«ããªããžã§ã¯ãã¿ã€ãã䜿çšããŸãã 次ã®äŸãèããŠã¿ãŸãããã
class Person: Object{ dynamic var name = "" } class Car: Object{ dynamic var owner:Person? }
åã®äŸã§ã¯ãææè ããããã£ã¯PersonããŒã¿ã¢ãã«ãšã®1察1ã®é¢ä¿ãšããŠæ©èœããŸãã
ã³ã¢ã¯ã©ã¹ãäœæãããã®ã§ãåçŽãªToDoã¢ããªã±ãŒã·ã§ã³ãäœæããŠãRealmã«ã€ããŠåŒãç¶ã説æããŸãã æåã«ã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããŠèŠèŽããŸãã Xcode 7ïŒãŸãã¯ãã以äžïŒã§å®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãã

ãããžã§ã¯ãã§ã¯ãTasksViewControllerãšTaskListViewControllerã®2ã€ã®View Controllerãè¿œå ããŸããã æåã®ã³ã³ãããŒã©ãŒã¯ã¿ã¹ã¯é ç®ã衚瀺ããããã«äœ¿çšããã2çªç®ã®ã³ã³ãããŒã©ãŒã¯äœ¿çšå¯èœãªãã¹ãŠã®ã¿ã¹ã¯ã衚瀺ããããã«äœ¿çšãããŸãã ãªã¹ããã¥ãŒã§[+]ãã¿ã³ãã¯ãªãã¯ããŠãã¿ã¹ã¯ã®ãªã¹ããè¿œå ããŸãã ã¿ã¹ã¯ãªã¹ãã®éžæã¯ã次ã®ç»é¢ã«ç¶ããŸãã ããã§ãããã€ãã®ã¿ã¹ã¯ãè¿œå ã§ããŸãã
ãã¢ã¢ããªã±ãŒã·ã§ã³ã®äž»ãªã¢ã€ãã¢ã§ãæ°ããã¿ã¹ã¯ãªã¹ããRealmããŒã¿ããŒã¹ã«è¿œå ããæ¹æ³ãèŠãŠã¿ãŸãããã ãããè¡ãã«ã¯ãããã€ãã®èŠçŽ ãåŠçããå¿ èŠããããŸãã
- æ°ããTaskListã¢ãã«ãªããžã§ã¯ããäœæããRealmã«ä¿åããŸãã
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæŽæ°ããããã«ãããŒã¿ããŒã¹ãããªã¹ããèªã¿åãèŠæ±ãè¡ããŸã
ãªããžã§ã¯ããã¬ã«ã ã«ä¿åããã«ã¯ããªããžã§ã¯ãã®ã¢ãã«ããµãã¯ã©ã¹åããŠããããªããžã§ã¯ããã¬ã«ã ã«æžã蟌ãã ãã§ãã å¿ èŠãªã³ãŒãã¹ããããã®äŸã次ã«ç€ºããŸãã
let taskListA = TaskList() taskListA.name = "Wishlist" let wish1 = Task() wish1.name = "iPhone6s" wish1.notes = "64 GB, Gold" let wish2 = Task(value: ["name": "Game Console", "notes": "Playstation 4, 1 TB"]) let wish3 = Task(value: ["Car", NSDate(), "Auto R8", false]) taskListA.tasks.appendContentsOf([wish1, wish2, wish3])
TaskListã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠã¿ã¹ã¯ãªã¹ããäœæãããã®ããããã£ãèšå®ããŸãã 次ã«ãTaskã¿ã€ãã®3ã€ã®ãªããžã§ã¯ãïŒwish1ãwish2ãããã³wish3ïŒãäœæããŸãã ããã§ã¯ãã¬ã«ã ãªããžã§ã¯ããäœæãã3ã€ã®æ¹æ³ã瀺ããŸããã
- wish1ãªããžã§ã¯ãã§ïŒRealmã¯ã©ã¹ãäœæããããããã£ãèšå®ããã ãã§ãã
- wish2ïŒãªããžã§ã¯ãã§ã¯ãããŒïŒããããã£åïŒãšå€ã䜿çšããŠããããã£ãèŸæžã«æž¡ãããšãã§ããŸãã
- wish3ïŒãªããžã§ã¯ãã§ã¯ãé åã䜿çšããŠããããã£ãæž¡ãããšãã§ããŸãã é åã®å€ã¯ãã¯ã©ã¹ã¢ãã«å®£èšã®å¯Ÿå¿ããããããã£ãšåãé åºã§ãªããã°ãªããŸããã
ãã¹ãããããªããžã§ã¯ã
Realmã§ãªããžã§ã¯ããäœæãããšãã®ãã1ã€ã®æ©èœã¯ããã¹ãããããªããžã§ã¯ãã§ãã ãã®é¢æ°ã¯ã1察1ãŸãã¯1察å€ã®é¢ä¿ãããå Žåã«äœ¿çšã§ããŸããã€ãŸããObjectãŸãã¯List <Object>ã¿ã€ãã®ããããã£ãããããšãæå³ããŸãã ãã®å Žåãã¢ãããŒã2ãŸãã¯3ã䜿çšãããšããªããžã§ã¯ããããã®ããããã£ãè¡šãé åãŸãã¯èŸæžã«çœ®ãæããããšãã§ããŸãã ãã¹ãããããªããžã§ã¯ãã®äŸã次ã«ç€ºããŸãã
let taskListB = TaskList(value: ["MoviesList", NSDate(), [["The Martian", NSDate(), "", false], ["The Maze Runner", NSDate(), "", true]]])
äžèšã®ã³ãŒãã§ã¯ããã£ã«ã ã®ãªã¹ããäœæããååãcreateAtãããã³ã¿ã¹ã¯ã®é åãèšå®ããŸãã åã¿ã¹ã¯ã¯ãããããã£ã®é åã䜿çšããŠäœæãããŸãã ããšãã°ã[â The Maze RunnerâãNSDateïŒïŒãââãtrueã«èšå®]ã¯ãååãcreateAtãnotesãããã³ããŒã«å€æ°isCompletedãæã€ã¿ã¹ã¯ãè¡šããŸãã
ã¬ã«ã ã«ãªããžã§ã¯ããä¿åãã
ããã§ãRealmãªããžã§ã¯ããäœæãããã€ã§ããããã䜿çšããæ¹æ³ãç¥ãå¿ èŠããããŸã;ããããæžã蟌ã¿ãã©ã³ã¶ã¯ã·ã§ã³ã§RealmããŒã¿ããŒã¹ã«ä¿åããå¿ èŠããããŸãã Realmã«ããŒã¿ãä¿åãããšãRealmã«ä¿åãããŠããéãä»»æã®ã¹ããªãŒã ã§ãããã®ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã æžã蟌ã¿ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããã«ã¯ãã¬ã«ã ãªããžã§ã¯ããå¿ èŠã§ãã ã¬ã«ã ã€ã³ã¹ã¿ã³ã¹ïŒã¹ã³ãŒããšãåŒã°ããïŒã¯ãã¬ã«ã ããŒã¿ããŒã¹ãè¡šããŸãã 次ã®ããã«ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããŸãã
let uiRealm = try! Realm()
AppDelegate.swiftã®å é ã«ãã®è¡ãè¿œå ããŠããã¹ãŠã®Swiftãã¡ã€ã«ã§ãªããžã§ã¯ããå ±æããããã«äœ¿çšããŸãã åŸã§ã次ã®ãããªæžã蟌ã¿ã¡ãœãããç°¡åã«åŒã³åºãããšãã§ããŸãã
uiRealm.write { () -> Void in uiRealm.add([taskListA, taskListB]) }
æåã«ãuiRealmãªããžã§ã¯ããAppDelegateã¯ã©ã¹ã§äœæãããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå ±æãããŸãã ã¬ã«ã ãªããžã§ã¯ãã¯ãã¹ã¬ããã»ãŒãã§ã¯ãªããã¹ã¬ããéã§å ±æã§ããªããããäžåºŠã ãäœæããå¿ èŠããããŸãã å¥ã®ã¹ã¬ããã§æžã蟌ã¿æäœãå®è¡ããå Žåã¯ãæ°ããã¬ã«ã ãªããžã§ã¯ããäœæããå¿ èŠããããŸãã ãã®ã€ã³ã¹ã¿ã³ã¹ã¯UIã¹ã¬ããã«åºæã§ããããããuiRealmããšåä»ããŸããã
ã¢ããªã±ãŒã·ã§ã³ã«æ»ããŸãããããŠãŒã¶ãŒã[äœæ]ãã¿ã³ãã¯ãªãã¯ããåŸãã¿ã¹ã¯ãªã¹ããä¿åããŸãã TasksViewControllerã®displayAlertToAddTaskã¡ãœããã«ã¯ãcreateActionãªããžã§ã¯ãããããŸãã
let createAction = UIAlertAction(title: doneTitle, style: UIAlertActionStyle.Default) { (action) -> Void in let taskName = alertController.textFields?.first?.text if updatedTask != nil{ // update mode uiRealm.write({ () -> Void in updatedTask.name = taskName! self.readTasksAndUpateUI() }) } else{ let newTask = Task() newTask.name = taskName! uiRealm.write({ () -> Void in self.selectedList.tasks.append(newTask) self.readTasksAndUpateUI() }) } }
äžèšã®ã³ãŒãã§ã¯ãããã¹ãããã¯ã¹ããã¿ã¹ã¯åãååŸããRealm writeã¡ãœãããåŒã³åºããŠã¿ã¹ã¯ãªã¹ããä¿åããŸãã
è€æ°ã®ã¬ã³ãŒããåæã«å®è¡ãããå Žåããããã¯äºãã«ãããã¯ããããããå®è¡ãããã¹ã¬ããããããã¯ããããšã«æ³šæããŠãã ããã ãããã£ãŠãUIã¹ã¬ããã§ã¯ãªããå¥ã®ã¹ã¬ããã§ã®å®è¡ãæ€èšããå¿ èŠããããŸãã ãã1ã€ã®æ©èœã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®æžã蟌ã¿äžã«èªã¿åãããããã¯ãããªãããšã§ãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãå€ãã®èªã¿åãæäœãå®è¡ã§ãããã䟿å©ã§ãã
ãªããžã§ã¯ãã®ååŸ
Realmã«ããŒã¿ãæžã蟌ãæ¹æ³ãåŠç¿ããã®ã§ãããŒã¿ãååŸããæ¹æ³ãããããªããŠãç¡é§ã§ãã RealmããŒã¿ããŒã¹ã®ã¯ãšãªã¯éåžžã«ç°¡åã§ãã ããŒã¿ãèšå®ããã³ãã£ã«ã¿ãªã³ã°ããããã®å€ãã®ãªãã·ã§ã³ãæäŸãããŸãã Realmã§ã¯ãšãªãå®è¡ãããšãResultsãªããžã§ã¯ãã®ãªã¹ããè¿ãããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã¯é åã«éåžžã«äŒŒãŠãããããResultsãSwifté åãšèããŠãã ããã
Resultsã®ã€ã³ã¹ã¿ã³ã¹ãããå Žåããã£ã¹ã¯ããçŽæ¥ããŒã¿ãååŸããŸãã ããŒã¿ã®å€æŽïŒãã©ã³ã¶ã¯ã·ã§ã³å ïŒã¯ããã£ã¹ã¯äžã®ããŒã¿ã®å€æŽã«ã€ãªãããŸãã Realmã§ã¯ããªããžã§ã¯ãããªã¯ãšã¹ãããã«ã¯ãã¯ã©ã¹åããã©ã¡ãŒã¿ãŒãšããŠãªããžã§ã¯ãã¡ãœãããåŒã³åºãã ãã§ãã ããã䜿çšããŠTaskListãèªã¿åããUIãæŽæ°ããæ¹æ³ãèŠãŠã¿ãŸãããã
TasksListsViewControllerã§ãã®ããããã£ãå®çŸ©ããŸããã
var lists : Results<TaskList>!
ãããŠã次ã®ããã«readTasksAndUpdateUIã¡ãœãããå®è£ ããŸãã
func readTasksAndUpdateUI() { lists = uiRealm.objects(TaskList) self.taskListsTableView.setEditing(false, animated: true) self.taskListsTableView.reloadData() }
ãŸããtableViewã¡ãœããïŒ_ïŒcellForRowAtIndexPathïŒ_ïŒã§ã¯ãååã®ãªã¹ããšãã®ãªã¹ãå ã®ã¿ã¹ã¯ã®æ°ã衚瀺ããŸãã
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCellWithIdentifier("listCell") let list = lists[indexPath.row] cell?.textLabel?.text = list.name cell?.detailTextLabel?.text = "\(list.tasks.count) Tasks" return cell! }
ããªãç°¡åã§ããã æåŸã«è¡ãããšã¯ãviewWillAppearã¡ãœããã®readTasksAndUpdateUIé¢æ°ãåŒã³åºããŠããã¥ãŒãéããããšãã«åžžã«æŽæ°ãããããã«ããããšã§ãã
override func viewWillAppear(animated: Bool) { readTasksAndUpdateUI() }
ããããã¬ã«ã ã䜿çšããŠã¿ã¹ã¯ãªã¹ããèªã¿æžãããæ¹æ³ã§ãã 次ã«ãã¬ã«ã ã§æŽæ°ãŸãã¯åé€æäœãå®è¡ããæ¹æ³ãåŠç¿ããŸãã å§ããåã«ããªã¹ãããæäœãç·šé/åé€ããããã®ãããžã§ã¯ããã³ãã¬ãŒãã®ã³ãŒãã¹ãããããèŠãŠã¿ãŸãããã
ãŸããisEditingModeãšåŒã°ããTaskListsViewControllerã«ããŒã«å€ããããŸããããã¯ãç·šéã¢ãŒããšéåžžã¢ãŒããåãæ¿ããããã«äœ¿çšãããŸãã
var isEditingMode = false
[ç·šé]ãã¿ã³ãã¯ãªãã¯ãããšãdidClickOnEditButtonã¡ãœãããåŒã³åºãããŸãã
@IBAction func didClickOnEditButton(sender: UIBarButtonItem) { isEditingMode = !isEditingMode self.taskListsTableView.setEditing(isEditingMode, animated: true) }
ãã®ã¢ã¯ã·ã§ã³ã¯ãUITableViewã®setEditingã¡ãœããã䜿çšããŠãUITableViewã®ç·šéã¢ãŒããæå¹/ç¡å¹ã«ããŸãã UITableViewã§ã¯ãã»ã«ã®ç·šéã¢ãŒãã®æšæºã¢ã¯ã·ã§ã³ã«ãããåé€ãã¢ã¯ã·ã§ã³ã衚瀺ãããŸãããiOS 8.0以éã§ã¯ããŠãŒã¶ãŒãæã§ã¹ã¯ã€ããããšãã«ã»ã«ã«è¡šç€ºãããã¢ã¯ã·ã§ã³ãæ§æããããã«ãeditActionsForRowAtIndexPathãšããæ°ããã¡ãœãããUITableViewDelegateã«è¿œå ãããŸããã
ãã®ã¡ãœãããå®è£ ããŠã次ã®ããã«åé€ãšç·šéã®2ã€ã®ã¢ã¯ã·ã§ã³ãè¿œå ããŸãã
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Destructive, title: "Delete") { (deleteAction, indexPath) -> Void in //Deletion will go here let listToBeDeleted = self.lists[indexPath.row] uiRealm.write({ () -> Void in uiRealm.delete(listToBeDeleted) self.readTasksAndUpdateUI() }) } let editAction = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Edit") { (editAction, indexPath) -> Void in // Editing will go here let listToBeUpdated = self.lists[indexPath.row] self.displayAlertToAddTaskList(listToBeUpdated) } return [deleteAction, editAction] }
ããã§ã¯ãUITableViewRowActionã¢ã¯ã·ã§ã³ã䜿çšãã2ã€ã®æ¹æ³ãè¿œå ããŸãããããã¯ãã¢ã¯ã·ã§ã³ã®ã¹ã¿ã€ã«ãååãããã³ãã³ãã©ãŒã䜿çšããŠã¢ã¯ã·ã§ã³ãåŠçããŸãã çŸåšãã»ã«äžã§æãã¹ã©ã€ããããããç·šéã¢ãŒãã§ç Žå£çãªãã¿ã³ãã¯ãªãã¯ãããšãã¢ã¯ã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã

ããã¯ãã¢ã³ã€ã³ã¹ããŒã«ãšæŽæ°ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®å€èŠ³ã§ãã
ãªããžã§ã¯ããåé€ãã
RealmããŒã¿ããŒã¹ãããªããžã§ã¯ããšããŒã¿ãåé€ããã«ã¯ãRealmãªããžã§ã¯ãã®deleteã¡ãœãããåŒã³åºããŠãåé€ãããªããžã§ã¯ããæž¡ãã ãã§ãã ãããŠãã¡ãããããã¯æžã蟌ã¿ãã©ã³ã¶ã¯ã·ã§ã³ã§è¡ãå¿ èŠããããŸãã ããŒã¿ããŒã¹ããã¿ã¹ã¯ãªã¹ããåé€ããæ¹æ³ã瀺ã次ã®ã³ãŒããèŠãŠãã ããã
let listToBeDeleted = self.lists[indexPath.row] uiRealm.write({ () -> Void in uiRealm.delete(listToBeDeleted) self.readTasksAndUpdateUI() })
åé€åŸãæ°ããããŒã¿ãååŸããŠUIãæŽæ°ããããã«readTasksAndUpdateUIé¢æ°ãåŒã³åºããŸããã
1ã€ã®ãªããžã§ã¯ããåé€ãã代ããã«ãdeleteAllãšåŒã°ããå¥ã®é¢æ°ããããŸãããã®é¢æ°ã䜿çšãããšãããŒã¿ããŒã¹å ã®ãã¹ãŠã®ã¯ã©ã¹ã®ãã¹ãŠã®ããŒã¿ãåé€ã§ããŸãã ãã®æ¹æ³ã¯ãçŸåšã®ãŠãŒã¶ãŒã®ããŒã¿ãä¿åãããã°ã¢ãŠãæã«ããŒã¿ããŒã¹ãã¯ãªã¢ããå Žåã«éåžžã«äŸ¿å©ã§ãã
uiRealm.write({ () -> Void in uiRealm.deleteAll() })
ãªããžã§ã¯ãã®æŽæ°
Realmã«ã¯ãªããžã§ã¯ããæŽæ°ããå€ãã®æ¹æ³ããããŸããããããã¯ãã¹ãŠæžã蟌ã¿ãã©ã³ã¶ã¯ã·ã§ã³å ã§å®è¡ããå¿ èŠããããŸãã 以äžã§ã¯ããªããžã§ã¯ããæŽæ°ããããã®ããã€ãã®ã¢ãããŒããèŠãŠãããŸãã
ããããã£ã䜿çšãã
èšé²ãããã¯å ã®æ°ããå€ãæã€äžé£ã®ããããã£ã䜿çšããŠãRealmãªããžã§ã¯ããæŽæ°ã§ããŸãã ããšãã°ãTasksViewControllerã§ã¯ãããããã£ãèšå®ããŠã¿ã¹ã¯ã®ç¶æ ãå€æŽããã ãã§ãã
uiRealm.write({ () -> Void in task.isCompleted = true })
äž»ããŒã䜿çšãã
ã¬ã«ã ã¯ããªããžã§ã¯ãã®åäžè¡ãŸãã¯intããããã£ãäž»ããŒãšããŠããŒã¯ããããšããµããŒãããŠããŸãã addïŒïŒé¢æ°ã䜿çšããŠRealmãªããžã§ã¯ããäœæãããšãã«ãããŒãæ¢ã«ååšããå Žåããªããžã§ã¯ãã¯æ°ããå€ã§æŽæ°ãããŸãã
以äžã«äŸã瀺ããŸãã
let user = User() user.firstName = "John" user.lastName = "Smith" user.email = "example@example.com" user.id = 1 // Updating User with id = 1 realm.write { realm.add(user, update: true) }
èå¥åã¯äž»ããŒãšããŠèšå®ãããŸãã id 1ã®ãŠãŒã¶ãŒãååšããå ŽåãRealmã¯ããã«å¿ããŠãªããžã§ã¯ããæŽæ°ããŸãã ãã以å€ã®å ŽåãRealmã¯ãªããžã§ã¯ããããŒã¿ããŒã¹ã«æ¿å ¥ããŸãã
KVCïŒããŒå€ã³ãŒãã£ã³ã°ïŒã®äœ¿çš
çµéšè±å¯ãªiOSéçºè ã§ããã°ãããŒãšå€ã®ã³ãŒãã£ã³ã°ã«ç²ŸéããŠããå¿ èŠããããŸãã ãªããžã§ã¯ããçµæããªã¹ããªã©ã®ã¬ã«ã ã¯ã©ã¹ã¯KVCäºæã§ãã ããã¯ãã©ã³ã¿ã€ã ã§ããããã£ãèšå®/æŽæ°ããã®ã«åœ¹ç«ã¡ãŸãã ãªã¹ããšçµæã§ã®KVCãããã³ã°ã®ãã1ã€ã®èå³æ·±ãæ©èœã¯ãåãªããžã§ã¯ããå埩åŠçããŠæŽæ°ããããšãªããã³ã¬ã¯ã·ã§ã³ãªããžã§ã¯ãå šäœãæŽæ°ã§ããããšã§ãã ããªãã¯ãããå®å šã«ç解ã§ããªãããšãç¥ã£ãŠããŸãã ãã®äŸãèŠãŠã¿ãŸãããïŒ
let tasks = uiRealm.objects(Task) uiRealm.write { () -> Void in tasks.setValue(true, forKeyPath: "isCompleted") }
äžèšã®ã³ãŒãã§ã¯ããã¹ãŠã®Taskãªããžã§ã¯ããååŸãããªã¯ãšã¹ããäœæããè¿ããããã¹ãŠã®ãªããžã§ã¯ãã«å¯ŸããŠisCompletedãtrueã«èšå®ããŸããã ã€ãŸããããŒã¿ããŒã¹å ã®ãã¹ãŠã®ã¿ã¹ã¯ã1è¡ã®ã³ãŒãã§å®äºæžã¿ãšããŠããŒã¯ããŸããã
ToDoã¢ããªã«æ»ããŸãããã displayAlertToAddTaskListã¡ãœãããããäžåºŠèŠããšã次ã®ã³ãŒããã©ã°ã¡ã³ããèŠã€ãããŸãã
// update mode uiRealm.write({ () -> Void in updatedList.name = listName! self.readTasksAndUpdateUI() })
ãŠãŒã¶ãŒãååã®ãªã¹ããç·šéãããšãã«å®è¡ãããŸãã nameããããã£ãèšå®ããŠãååã®ãªã¹ããæŽæ°ããã ãã§ãã
ã¿ã¹ã¯ãããã³ã°
TaskListViewControllerã®ã»ãšãã©ã®ã³ãŒãã玹ä»ããŸããã 次ã«ãã¿ã¹ã¯ãªã¹ãã«ã¿ã¹ã¯ã¢ã€ãã ã衚瀺ããããã«äœ¿çšãããTasksViewControllerãèŠãŠã¿ãŸãããã ã³ã³ãããŒã©ãŒã«ã¯UITableViewããããããã¯2ã€ã®ã»ã¯ã·ã§ã³ã«åãããŠããŸãïŒå®äºããã¿ã¹ã¯ãšéããŠããã¿ã¹ã¯ã§ãã TasksViewControllerã«ã¯ã次ã®ããããã£ããããŸãã
var selectedList : TaskList! var openTasks : Results<Task>! var completedTasks : Results<Task>!
selectedListã¯ãTaskListsViewControllerã«æž¡ãããéžæãããã¿ã¹ã¯ãªã¹ããæ ŒçŽããããã«äœ¿çšãããŸãã éããŠããç¶æ ãŸãã¯å®äºããç¶æ ã§ã¿ã¹ã¯ããã£ã«ã¿ãªã³ã°ããã«ã¯ãopenTasksãšcompletedTaskã®2ã€ã®å€æ°ã宣èšããŸãã ãã£ã«ã¿ãªã³ã°ã«ã¯ãRealmã§éæ³ã®é¢æ°ãã£ã«ã¿ãŒïŒïŒã䜿çšããŸãã ãã£ã«ã¿ãªã³ã°ã®ä»çµã¿ã説æããåã«ãã³ãŒãã§ã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã
func readTasksAndUpateUI(){ completedTasks = self.selectedList.tasks.filter("isCompleted = true") openTasks = self.selectedList.tasks.filter("isCompleted = false") self.tasksTableView.reloadData() }
ãã®ã¡ãœããã§ã¯ãfilterã¡ãœãããåŒã³åºããŠçµæããã£ã«ã¿ãªã³ã°ããŸãã ã¬ã«ã ã§ã¯ã filterïŒïŒã¡ãœããã䜿çšããŠãªã¯ãšã¹ããç°¡åã«ãã£ã«ã¿ãªã³ã°ã§ããŸãã ã¡ãœããã¯ããªã¹ããçµæãããã³ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã«ãã£ãŠåŒã³åºãããšãã§ããŸãã ãã£ã«ã¿æååã§æå®ãããæ¡ä»¶ã«åºã¥ããŠç¹å®ã®ãªããžã§ã¯ããè¿ããŸãããã£ã«ã¿ã¯NSPredicateãšèããããšãã§ããŸããäžè¬çã«ããããã¯å®å šã«åäžã§ãããšèšããŸããè¿°èªæååã§NSPredicateãäœæãããããæž¡ããŠãå®äºããã¿ã¹ã¯ããã£ã«ã¿ãªã³ã°ãããã®ããã«ã¡ãœããããã£ã«ã¿ãªã³ã°ã§ããŸãã
å¥ã®äŸãèŠãŠã¿ãŸãããã
// using predicate string var redCars = realm.objects(Car).filter("color = 'red' AND name BEGINSWITH 'BMW'") // using NSPredicate let aPredicate = NSPredicate(format: "color = %@ AND name BEGINSWITH %@", "red", "BMW") redCars = realm.objects(Car).filter(aPredicate)
äžèšã®ã³ãŒãã§ã¯ããããã®è»ãèµ€ã§ãã£ã«ã¿ãŒåŠçããååããBMWãã§å§ãŸã£ãŠããŸããã³ãŒãã®æåã®è¡ã¯ãåã«ãã£ã«ã¿ãªã³ã°æååã䜿çšããŠãã£ã«ã¿ãªã³ã°ãå®è¡ããŸãããŸãã¯ãNSPredicateã䜿çšããŠåãçµæãåŸãããšãã§ããŸããæãäžè¬çãªãã£ã«ã¿ãŒæ¯èŒæŒç®åãç°¡åã«èª¬æããè¡šã次ã«ç€ºããŸãã

ä»åã
RealmããŒã¿ããŒã¹ã®åºæ¬çãªæäœã«ã€ããŠèª¬æããã®ã§ããã®ãã¥ãŒããªã¢ã«ã®æåŸãŸã§ã«çŽ¹ä»ãããå¥ã®æ©èœããããŸãããœãŒãã¯ãRealmãæäŸãããã1ã€ã®äŸ¿å©ãªæ©èœã§ãããªã¹ããšçµæã§ã¯ãsortã¡ãœãããåŒã³åºããŠããŒã¿ã³ã¬ã¯ã·ã§ã³ããœãŒãã§ããŸãããªã¹ãå ã®ã¿ã¹ã¯ãã¢ã«ãã¡ãããé ãŸãã¯äœææ¥ã§äžŠã¹æ¿ããæ¹æ³ãèŠãŠã¿ãŸãããããŸããUIã§ãéžæã«åºã¥ããŠãªã¹ãã䞊ã¹æ¿ããã»ã°ã¡ã³ãã³ã³ãããŒã«ãè¿œå

ããŸããéžæããŒã¹ã®äžŠã¹æ¿ããå®è¡ããã«ã¯ãããžãã¯ã次ã®ããã«å®è£ ããŸãã
@IBAction func didSelectSortCriteria(sender: UISegmentedControl) { if sender.selectedSegmentIndex == 0{ // AZ self.lists = self.lists.sorted("name") } else{ // date self.lists = self.lists.sorted("createdAt", ascending:false) } self.taskListsTableView.reloadData() }
ãããã«
Realmã¯ãããŒã¿ãšããŒã¿ããŒã¹ã®ããŒã«ã«ã¹ãã¬ãŒãžã管çããããã®éåžžã«è»œéã§ã·ã³ãã«ãªãœãªã¥ãŒã·ã§ã³ã§ããã¬ã«ã ã䜿çšãããšãã»ãã®æ°è¡ã®ã³ãŒããèšè¿°ããã ãã§ãäœæ¥ãæ¡å€§ããã³ç°¡çŽ åã§ããŸããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ãã²ãŒã ã§ããããã®ããŒã¿ããŒã¹ã䜿çšããå¿ èŠããããšæãã®ã§ãæ©äŒãäžããŠãã ããã
次ã¯ïŒ
ãã®ã¬ã€ãã®å©ããåããŠããããžã§ã¯ãã§Realmã䜿çšããèªã¿åããæžã蟌ã¿ãæŽæ°ãåé€ãªã©ã®ãã¹ãŠã®åºæ¬æäœãå®è¡ã§ããŸããã¬ã«ã ã«ã¯ããŸã æ £ããŠããå¿ èŠãããè¿œå ã®ãããã¯ãããã€ããããŸããç§ããå§ãã§ããæé«ã®ãªã³ã¯ã¯ãRealmã®å ¬åŒWebãµã€ãã§ãããããã®äººãã¡ã¯ããã¹ãŠãææžåããçŽ æŽãããä»äºãããŸããã
Todoã¢ããªã®å®å šãªãœãŒã¹ã³ãŒãã¯ãã¡ãã«ãããŸãã