sunshinejr / SwiftyUserDefaults

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

Update 5.0.0 failed #233

Closed vienvu89 closed 4 years ago

vienvu89 commented 4 years ago

Hi guys, I just updated to 5.0.0 and I face this issues: Ambiguous reference to member 'observe(_:options:handler:)' I can't observer change of a key path.

sunshinejr commented 4 years ago

Hey @vienvu89, I understand that you resolved your issue?

vienvu89 commented 4 years ago

Yes, I resolve. It is my fault. Thanks.

kaunteya commented 4 years ago

@vienvu89 Hey. I am facing this issue. How do I fix this?

vienvu89 commented 4 years ago

@kaunteya I face it when I use it to observer update of key. So I fix it by: example: I change let nameKey = DefaultsKey<String>.imageQuality to let nameKey = DefaultsKey<String?>("imageQuality") and Defaults.observe(key: nameKey) { to Defaults.observe(nameKey) {

kaunteya commented 4 years ago

I have added a variable in DefaultsKeys

extension DefaultsKeys {
    var showLineNumbers: DefaultsKey<Bool> { .init("showLineNumbers", defaultValue: false) }
}

And trying to add an observer in viewDidLoad

Defaults.observe(Defaults.showLineNumbers) { a in

}

I am getting the Ambiguous reference error here @sunshinejr

vienvu89 commented 4 years ago

@kaunteya You can consider changing Defaults.showLineNumbers to DefaultsKey<Bool?>("showLineNumbers"). It's a workaround to make it work.

sunshinejr commented 4 years ago

hmm this is strange, wonder why it happens? @vienvu89 do you mean that only optional types can be observed? Did you try using Defaults.observe(\.showLineNumbers)?

vienvu89 commented 4 years ago

@sunshinejr It works. Maybe it's better than my workaround.

sunshinejr commented 4 years ago

Ah I see what you guys are trying to do. Defaults.showLineNumbers is not a key, it's a value! The key is showLineNumbers, which is in DefaultsKeys. So You could also fix this by using Defaults.observe(DefaultsKeys.showLineNumbers), but yeah the keypath syntax should be a lot nicer to use: Defaults.observe(\.showLineNumbers).

Let me know if it helps @vienvu89 @kaunteya.