SwiftyUserDefaults icon indicating copy to clipboard operation
SwiftyUserDefaults copied to clipboard

Need help for enum nested DefaultsKeys

Open goodocy opened this issue 6 years ago • 1 comments

Keys.swift

extension DefaultsKeys {
    enum Foo {
        enum Bar1 {
            var key: DefaultsKey<String> { .init("foo.bar1.key", defaultValue: "") }
        }
        enum Bar2 {
            var key: DefaultsKey<String> { .init("foo.bar2.key", defaultValue: "") }
        }
    }
}

Test.swift

Defaults.*?*

How can I work?

goodocy avatar Sep 25 '19 09:09 goodocy

Hey @goodocy - great question. Not sure if it's possible with how currently KeyPaths are created, though. You can try and use multiple adapters with multiple key stores, however:

struct FooBar1DefaultsKeys: DefaultsKeyStore {
    var key: DefaultsKey<String> { .init("foo.bar1.key", defaultValue: "") }
}

struct FooBar2DefaultsKeys: DefaultsKeyStore {
    var key: DefaultsKey<String> { .init("foo.bar2.key", defaultValue: "") }
}

let adapter1 = DefaultsAdapter(defaults: UserDefaults.standard, keyStore: FooBar1DefaultsKeys())
_ = adapter1.key
_ = adapter1[\.key]

you could also try with creating your own struct that holds your adapters:

struct Defaults {
    static let fooBar1 = DefaultsAdapter(defaults: UserDefaults.standard, keyStore: FooBar1DefaultsKeys())
}

_ = Defaults.fooBar1.key
_ = Defaults.fooBar1[\.key]

Let me know if it helps 👍

sunshinejr avatar Sep 25 '19 10:09 sunshinejr