Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Realm iOS Code Review
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
USAMI Kosuke
March 26, 2017
Programming
1.5k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Realm iOS Code Review
https://realm.connpass.com/event/49669/
USAMI Kosuke
March 26, 2017
Transcript
42 slides
Realm iOS Λ͏ͱ͖ͷ ϋϚΓϙΠϯτ USAMI Kosuke (Fenrir Inc.)
ࣗݾհ » Ӊࠤݟ ެีʢ@usamik26ʣ » ϑΣϯϦϧגࣜձࣾ » iOS ΞϓϦ։ൃΤϯδχΞ »
Swift » Xamarin.iOS » ͖ͳϥΠϒϥϦ RxSwift
Realm » ࠷ۙ 1ʙ2 ͰؔΘ͍ͬͯΔ։ൃҊ݅ͷ΄ͱΜͲͰ Realm ࠾༻ » Realm Objective-C
» Realm Swift » Realm Xamarin
ͳͥ Realm ͳͷ͔ʁ
ͳͥ Realm ͳͷ͔ʁ ͦͷલʹ… » ͦͦɺΞϓϦʹσʔλϕʔεʢDBʣΛଂ͢Δඞཁ͕͋Δ͔ʁ » DB ͳΜͯ໘ͦ͏… »
ଞʹͬͱ؆୯ͳํ๏͕͋ΔͷͰ…
σʔλϕʔεղܾͷҰखஈ » ͜Μͳ͜ͱ͕͍ͨ͠ » αʔόʔ͔Βऔಘͨ͠σʔλΛ͠Β͘ஔ͍͓͖͍ͯͨ » ΦϑϥΠϯͰલճऔಘͨ͠σʔλͰಈ࡞͍ͤͨ͞ » ϚελʔσʔλΛଂ͍ͨ͠ »
σʔλϕʔεͦΕΛղܾ͢Δखஈͷͻͱͭʹ͗͢ͳ͍
Realm ͦΕΒͷ༏Εͨղܾखஈ » ΈࠐΈ͕؆୯ » ίʔσΟϯά͕؆୯ » ͔ͩΒɺΧδϡΞϧͳ༻్ʹ͏ͷ͕ۤʹͳΒͳ͍
ϋϚΓϙΠϯτ » Realm Λ࠾༻͢ΔϓϩδΣΫτ͕૿͑ͨ » ͕ͨͬͯ͠ɺͦΕΛίʔυϨϏϡʔ͢Δػձ͕૿͑ͨ » ϨϏϡʔͨ͠தͰɺΑ͋͘ΔϋϚΓϙΠϯτΛڍ͛ͯΈ͍ͨ » ࣮ࡍʹυΩϡϝϯτಡΜͰਖ਼͘͠ѻ͑େৎ
ϑΝΠϧͷஔ͖ॴ
Realm ϑΝΠϧͷஔ͖ॴ » σϑΥϧτͰ Documents ϑΥϧμʹ࡞ΒΕΔ » ͍Ζ͍Ζࢼ͍ͨ࣌͠ʹศར » ͨͩ͠ɺσϑΥϧτͷ··Կߟ͑ͣʹϦϦʔεͯ͠μϝ
iCloud όοΫΞοϓ » Documents ϑΥϧμ iCloud όοΫΞοϓͷର » iCloud όοΫΞοϓͷඞཁ༰ྔ͕Ε্͕ͬͯ͠·͏
» ؾ͔ͮͣʹϦϦʔεͯ͠͠·͏ͱҰେࣄ
ରॲํ๏ » ҎԼͷͲΕ͔Ͱରॲ͢Δ » (1) ϑΝΠϧͷஔ͖ॴΛม͑Δ » (1-a) defaultRealm ͷઃఆΛม͑Δ
» (1-b) σϑΥϧτҎ֎ͷ Realm Λ͏ » (2) ϑΝΠϧͷஔ͖ॴͦͷ··ͰɺόοΫΞοϓର͔Βআ֎
Realm.Configuration var config = Realm.Configuration() config.fileURL = ... // (1-a)
defaultRealm ͷઃఆΛม͑Δ Realm.Configuration.defaultConfiguration = config // (1-b) σϑΥϧτҎ֎ͷ Realm Λ͏ let realm = try! Realm(configuration: config)
όοΫΞοϓର͔Βআ֎ let realmURL = Realm.Configuration.defaultConfiguration.fileURL! let realmURLs = [ //
ҙɿରϑΝΠϧ Realm ͷόʔδϣϯʹΑΓมΘΔ realmURL, realmURL.appendingPathExtension("lock"), realmURL.appendingPathExtension("note"), realmURL.appendingPathExtension("management") ] // (2) όοΫΞοϓର͔Βআ֎ʢҙɿઌʹ Realm ΛҰ࡞͓ͯ͘͜͠ͱʣ realmURLs.forEach { fileURL in fileURL.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey) }
Ͳ͏͖͢ʁ » جຊతʹϑΝΠϧͷஔ͖ॴΛม͑Δͷ͕ྑ͍ » Ͳ͜ʹஔ͔ͦ͘ͷΞϓϦͷઃܭ࣍ୈ » όοΫΞοϓର͔Βআ֎͢Δํ๏ඇৗखஈ
τϥϯβΫγϣϯΛ ·ͱΊΔ
τϥϯβΫγϣϯ » σʔλͷॻ͖ࠐΈ realm.write Λ͏ » realm.write ͷͨͼʹτϥϯβΫγϣϯ͕ൃੜ » ʢ͜ͷ͋ͨΓɺRealm
͕σʔλϕʔεͰ͋Δ͜ͱΛ࠶ೝࣝʣ
τϥϯβΫγϣϯ·ͱΊΔ͖ » ϑΝΠϧΞΫηεͷͨΊɺΦʔόʔϔου͕͋Δ » ·ͨɺRealm ϑΝΠϧ͕ංେԽ͢ΔݪҼʹͳΔ » τϥϯβΫγϣϯϩά͕ཷ·͍ͬͯͨ͘Ί » Realm
ϑΝΠϧ༰ྔ͕͙͢େ͖͘ͳΔͳΒٙͬͯΈΔ
τϥϯβΫγϣϯ͕૿͑Δύλʔϯ(1) » ϧʔϓͷதͰຖճ realm.write ΛݺΜͰ͍ͳ͍͔ʁ » Reactive ܥͰ realm.write ͷճΛҙ͍ࣝͯ͠Δ͔ʁ
» খ͞ͳ do map Ͱࡉ͔͘ realm.write ͍ͯͨ͠Γͱ͔
τϥϯβΫγϣϯ͕૿͑Δύλʔϯ(2) » Realm ʹϥούʔΛඃ͍ͤͯΔ߹ʢଞ DB ͱͷޓੑΛߟྀͳ Ͳʣ » ࡉ͔͍มߋͷͨͼʹ realm.write
ΛݺΜͰ͍ͳ͍͔ʁ
Ͳ͏͖͢ʁ » realm.write ͷճΛҙࣝͯ͠ݮΒ͢ » Realm ͷϥούʔͦͦ࡞Βͳ͍ͷ͕ϕλʔ
ίϯύΫγϣϯ
ϑΝΠϧංେԽͷରࡦ » ϑΝΠϧαΠζ͕େ͖͘ͳΔͷ͕ؾʹͳΔ߹͋Δ » ରࡦ » τϥϯβΫγϣϯΛ·ͱΊΔʢલड़ʣ » Realm ϑΝΠϧΛ࠷దԽ͢ΔʢίϯύΫγϣϯʣ
ίϯύΫγϣϯͷํ๏ » realm.writeCopy(toFile:) Ͱߦ͑Δ » ଞͷՕॴͰ Realm Λ͍ͬͯͳ͍λΠϛϯάͰߦ͏
ίϯύΫγϣϯͷॲཧ autoreleasepool { let realm = try! Realm() try! realm.writeCopy(toFile:
tempURL) try! FileManager.default.removeItem(at: realmURL) try! FileManager.default.moveItem(at: tempURL, to: realmURL) }
Ͳ͏͖͢ʁ » ίϯύΫγϣϯඞਢͰͳ͍ » ؾʹͳΔͳΒΞϓϦىಈ࣌ͳͲ Realm Λ͍ͬͯͳ͍ՕॴͰ࣮ߦ
ΦϒδΣΫτͷड͚͠
Realm ΦϒδΣΫτͷड͚͠ » ϝιουͷؒͷड͚͠ » ModelɺViewModelɺView ͷؒͷड͚͠ » εϨουͷؒͷड͚͠ »
εϨου͕ҟͳΔ߹ͦͷ··͢͜ͱͰ͖ͳ͍
ड͚͢ํ๏ » ΦϒδΣΫτΛͦͷ··͢ » struct ʹมͯ͢͠ » ϓϥΠϚϦΩʔΛ͢ » ThreadSafeReference
Λ͏
ΦϒδΣΫτΛͦͷ··͢ » ಉ͡εϨουͰ͋Δ͜ͱ͕໌Β͔Ͱ͋Δ߹ » ͨͩɺ͋·Γ֊Λ·͕ͨͬͯ͗͢͠Δͱ͔Γʹ͘͘ͳΔ
struct ʹมͯ͢͠ » Realm ΦϒδΣΫτͰͳ͍ͷʹม͢Δ » มͷख͕͔͔ؒΔ » ΦϒδΣΫτΛͦͷ··ͷܗͰͳ͘৭ʑखΛՃ͍͑ͨ߹ʹ͋Γ
ϓϥΠϚϦΩʔΛ͢ » εϨουΛ·͕ͨΔ߹ͷखܰͳํ๏ͷͻͱͭ // ड͚औΔଆ let realm = try! Realm()
let person = realm.object(ofType: Person.self, forPrimaryKey: key)
ThreadSafeReference Λ͏ » ৽͍͠ํ๏ɺϓϥΠϚϦΩʔ͕ͳͯ͘ྑ͍ // ͢ଆ let personRef = ThreadSafeReference(to:
person) // ड͚औΔଆ let realm = try! Realm() let person = realm.resolve(personRef)
ิ : Realm Πϯελϯεͷऔಘ » let realm = try! Realm()
ඞཁͳ࣌ʹͦͷ࣮ߦͯ͠ྑ͍ » ֤ϝιουͰߦ͏ » ֤ΫϩʔδϟͰߦ͏ » ίετ͕͔͔ΔॲཧͰͳ͍ » realm Λڞ༗͓ͯ͠͏ͱ͢Δͱ͔͑ͬͯ໘
Ͳ͏͖͢ʁ » ϓϥΠϚϦΩʔ·ͨ ThreadSafeReference ͕ྑ͍ » ΦϒδΣΫτͦͷͷΛ͢ͷൣғΛݶఆ͍ͨ͠ » struct ʹม͢Δͷɺͦͷมࣗମʹҙຯ͕͋Δ߹ͷΈ
ΫΤϦΛͲ͜Ͱߦ͏͔
ΫΤϦΛͲͷ֊Ͱߦ͏͔ » Ͳͷ֊ͷ͔ʁ » Model » ViewModel » View (ViewController)
Model » Model ʹϏδωεϩδοΫΛ࣋ͨͤΔ » ͜͜ͰΫΤϦ͕ߦΘΕΔ » ϏδωεϩδοΫΛ ViewModel
View ʹஔ͔ͳ͍
ViewModel » ViewModel ը໘͝ͱͷදࣔ༻ίϯςϯπΛ࡞Δ » ͜͜ͰΫΤϦΛҰ෦׆༻͢Δ » Model ͕มΘͬͨ࣌ʹ Live
Object ͷػೳར༻ » View ༩͑ΒΕͨίϯςϯπΛϨΠΞτ͢Δ͚ͩ
Ͳ͏͖͢ʁ » Model : ϏδωεϩδοΫΛ࣋ͭ » ViewModel : දࣔ༻ίϯςϯπΛ࡞Δ »
View : ϨΠΞτͷΈ
·ͱΊ
·ͱΊ » ϑΝΠϧͷஔ͖ॴ » τϥϯβΫγϣϯΛ·ͱΊΔ » ίϯύΫγϣϯ » ΦϒδΣΫτͷड͚͠ »
ΫΤϦΛͲ͜Ͱߦ͏͔
More Decks by USAMI Kosuke
See All by USAMI Kosuke
Onsager代数とその周辺 / Onsager algebra tsudoi
usamik26
0
740
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
300
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
430
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
580
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
850
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
760
UICollectionView Compositional Layout
usamik26
0
920
Coding Swift with Visual Studio Code and Docker
usamik26
0
630
Swift Extension for Visual Studio Code
usamik26
2
1.2k
Other Decks in Programming
See All in Programming
はじめてのPLATEAU
nokonoko1203
1
640
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
160
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
320
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
240
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
230
Distance field of Julia set
kinakomoti321
0
320
LLM 101
dalinaum
0
480
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
830
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Accessibility Awareness
sabderemane
1
300
Darren the Foodie - Storyboard
khoart
PRO
5
4.1k
Bash Introduction
62gerente
615
220k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
12
1.3k
Making Projects Easy
brettharned
120
6.9k
My Coaching Mixtape
mlcsv
0
390