Giter Club home page Giter Club logo

Comments (5)

JensRavens avatar JensRavens commented on July 24, 2024

Yes, that's intended behaviour so far. You're creating a new Signal of type Void that uses the convenience init. This init now stores the last result (a successful result of void) and every subscriber get's the last result on subscription. Then on update you run the whole chain again - resulting in the second next fired.

Currently I'm using a workaround of using a Signal<Bool>() and then update that with true (which also calls next on subscribe if it has been fired before). I see how handy a case of a void signal without storage would be for user interaction, but I'm still a bit hesitant to include a if $0 is Void everywhere in the source code of Signal. Also it would be a bit strange if a Signal of one type behaves differently to a signal of another type.

Maybe you have an idea for better semantics of void signals?

from interstellar.

schwa avatar schwa commented on July 24, 2024

No I agree with you. I was just surprised at the behavior.

I wonder if an alternate form of init() might be possible. I'll play around and see what i can come up with.

from interstellar.

raheelahmad avatar raheelahmad commented on July 24, 2024

Why does Signal send the last value on subscription? Could we have at least a choice to send only send values on update? I guess that's veering towards the hot & cold semantics...

from interstellar.

JensRavens avatar JensRavens commented on July 24, 2024

Yep, it is. If you think about a UITextField having a textSignal: Signal<String>-property, most of the time it's handy to send the last value on subscribe to e.g. update a label. But this has several drawbacks: possible memory leaks, sending void on subscribe, breaking the first run of Thread-calls or just unexpected behaviour (like sending something when subscribing to a button). Therefore I'm not overly happy with the current implementation.

I have two ideas how to deal with this:

  • removing the value-property, so Signal becomes stateless (getting rid of the state also removes our last dependency on Foundation to sync the access on update)
  • adding an option to subscribe that defaults to false (this would correspond to key-value-observing's NSKeyValueObservingOptionInitial-option)

What do you think?

from interstellar.

JensRavens avatar JensRavens commented on July 24, 2024

V2 now allows for Observable<Void>.

from interstellar.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.