Created
June 4, 2016 20:59
-
-
Save jpsim/882cd69b35548796df121fa1d538e6ec to your computer and use it in GitHub Desktop.
TranslatedString Realm Model
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Example approach for modeling localized strings in Realm | |
import Foundation | |
import RealmSwift | |
enum Locale: String { | |
case English = "en" | |
case French = "fr" | |
} | |
class RealmLocale: Object { | |
var locale: Locale { | |
get { return Locale(rawValue: localeString)! } | |
set { localeString = newValue.rawValue } | |
} | |
dynamic var localeString = Locale.English.rawValue | |
} | |
class TranslatedString: Object { | |
dynamic var locale: RealmLocale? = RealmLocale() | |
dynamic var value = "" | |
} | |
class LocaleString: Object { | |
var locale = Locale.English | |
let translations = List<TranslatedString>() | |
var value: String { | |
return translations.filter("locale.localeString = %@", locale.rawValue).first!.value | |
} | |
} | |
let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "TemporaryRealm")) | |
realm.beginWrite() | |
let en = RealmLocale() | |
en.locale = .English | |
let fr = RealmLocale() | |
fr.locale = .French | |
let grapefruit = TranslatedString() | |
grapefruit.locale = en | |
grapefruit.value = "grapefruit" | |
let pamplemousse = TranslatedString() | |
pamplemousse.locale = fr | |
pamplemousse.value = "pamplemousse" | |
let translatedGrapefruit = LocaleString() | |
translatedGrapefruit.translations.appendContentsOf([grapefruit, pamplemousse]) | |
realm.add(translatedGrapefruit) | |
try! realm.commitWrite() | |
translatedGrapefruit.value // => 'grapefruit' | |
translatedGrapefruit.locale = .French | |
translatedGrapefruit.value // => 'pamplemousse' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment