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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
280
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
Event is what happens
moro
2
4.6k
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
180
GraphQL の onError と Nullability のこれから
quramy
0
210
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
200
protojson における文字化けの扱い
kazuki1023
0
400
Getting Started with Vibe Coding
miccheng
0
220
Next.js: The final boss of Web Performance
guaca
0
400
Distance field of Julia set
kinakomoti321
0
320
Railsバージョンを4倍にした話
optim
0
1k
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
850
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
550
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
560
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.7k
Embracing the Ebb and Flow
colly
88
5.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Building Applications with DynamoDB
mza
96
7.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
121
130k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Skip the Path - Find Your Career Trail
mkilby
1
290