Skip to content

Instantly share code, notes, and snippets.

@jpsim
Created June 4, 2016 20:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpsim/882cd69b35548796df121fa1d538e6ec to your computer and use it in GitHub Desktop.
Save jpsim/882cd69b35548796df121fa1d538e6ec to your computer and use it in GitHub Desktop.
TranslatedString Realm Model
// 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