Categories
Tags
Alamofire Android AppStoreConnect AWS Bun C++ cAdvisor CFW Cloudflare Cloudflare Access Cloudflare KV Cloudflare Tunnel Cloudflare Workers D1 Deno DevContainer Discord Docker ECR ECS Edizon Emulator EmuMMC Fastlane Firestore Frida Ghidra Git GitHub GitHub Actions GitLab GPG Grafana HACGUI Heroku Homebrew Hono IDA Pro iOS IPSwitch Jailbreak Javascript JSON JWT LanPlay Linode macOS Mirakurun MongoDB NestJS NextJS Nintendo Nintendo Switch NodeJS PHP PostgreSQL Prisma Programming Prometheus Python React Realm RealmSwift Ruby Salmon Run Salmonia3+ Shogi Sideload Snap Splatoon Splatoon2 Splatoon3 SSH Stable Diffusion Starlight Swift Swift Package SwiftUI Switch TensorRT Turf War Typescript TypeScript Ubuntu Ubuntu Server VNC VPN VSCode Vue WARP Wireguard XCode Xcode yarn zsh 家電 横歩取り
375 words
2 minutes
RealmOptionalがRealmPropertyになっていた
RealmSwift
最近 RealmSwift のバージョンが上がったらしく、それに伴ってデータベースに保存するオプショナル型の扱いが変わりました。
調べてもドキュメントは 10.5.0 くらいまでしか対応してなかったので自分で新しいコーディング方法を調べました。
RealmProperty
今までRealmOptional
を使っていたものがRealmProperty
に変わりました。それだけでなく、ちょっとだけ宣言の方法も変わったのでそれもご紹介。
// Deprecated
let zipcode = RealmOptional<Int>()
// Modern
let zipcode = RealProperty<Int?>()
要するにRealmOptional
をRealmProperty
に書き換えて、明示的にオプショナルであることを宣言するようにすれば良い。
Int
だけじゃなくてBool
にも使える、便利。
Optional
だけじゃなくて他にもアップデートがあって、UUID
やNSUUID
も新たに保存できるようになったようです。
Extension の書き方
型がInt
ではなくなったので Extension の書き方も変わりました。
例えば、強制的にアンラップするような以下のコードは次のように書き換えられます。
// Deprecated
extension RealmOptional where Value == Int {
var intValue: Int {
guard let value: Int = self.value else { return 0 }
return value
}
}
// Modern
extension RealmProperty where Value == Int? {
var intValue: Int {
guard let value: Int = self.value else { return 0 }
return value
}
}
まあそれだけで特に面白いところはなかったのですが。
記事は以上。
RealmOptionalがRealmPropertyになっていた
https://fuwari.vercel.app/posts/2021/06/realmoptional/