sunshinejr / SwiftyUserDefaults

Modern Swift API for NSUserDefaults
http://radex.io/swift/nsuserdefaults/static
MIT License
4.85k stars 365 forks source link

Need help for enum nested DefaultsKeys #215

Open goodocy opened 4 years ago

goodocy commented 4 years ago

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?

sunshinejr commented 4 years ago

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 👍