Skip to content

Idea: Composed Pow Effects Syntax #31

@mergesort

Description

@mergesort

I've recently found myself combining multiple effects, for example haptics and sounds or more complex effects like spinning and jumping an element at the same time.

I do this by adding two changeEffect calls, like so.

.changeEffect([.feedback(hapticImpact: .medium)], value: self.hasAnimated)
.changeEffect([.feedback(SoundEffect(url: SoundEffect.plinkSound))], value: self.hasAnimated)

The more effects I wish to chain together the longer the code grows, and the more call-sites I need to change grow the more I tweak the animation.

Instead I'd like to propose a few options that could work, as syntax that takes two modifiers and chains them together.

The simplest is an array:

.changeEffect([.feedback(hapticImpact: .medium), .feedback(SoundEffect(url: SoundEffect.plinkSound))], value: self.hasAnimated)

Which could even become variadics, now that they've become more powerful:

.changeEffect(.feedback(hapticImpact: .medium), .feedback(SoundEffect(url: SoundEffect.plinkSound)), value: self.hasAnimated)

Alternatively a function like composed(with: ) or adding(_ effect:) could be added to compose:

.changeEffect(.feedback(hapticImpact: .medium).composed(with: .feedback(SoundEffect(url: SoundEffect.plinkSound))), value: self.hasAnimated)

And lastly, perhaps using + operator:

.changeEffect(.feedback(hapticImpact: .medium) + .feedback(SoundEffect(url: SoundEffect.plinkSound)), value: self.hasAnimated)

Thank you as always! Would love to hear what you think, and if any of those seem like a good idea.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions