Skip to main content

Unidirectional Data Flow Architecture (Redux) in Swift

In this post, I try to explain why using Redux with Swift is better idea [than MVVM].

What is Redux and Unidirectional Data Flow?

Redux is a flux implementation but slightly better implementation, it makes your application’s state more predictable. It first came out in Javascript world as a predictable state container for JavaScript apps with the powerful javascript library React.

Redux, simply makes your application’s state in single store object. So firing an action from your application/in view’s lifecycle state changes and your reducers for that action generate a new state.


Seyhun Akyürek at Medium

Replacing Redux in Swift with something better

Being a fantastic framework for development doesn’t come without a cost. Every time you update internal state in Redux, the entire interface re-renders. This isn’t a huge deal in most cases. But eventually you might have a situation where one update to state needs to be instantaneous (like using the keyboard shortcut to move from one message to the next), while another update is taking a while to compute (like processing hundreds or thousands of new message headers just downloaded from the email server). Since everything is managed in Redux’s development-friendly single unidirectional, single-threaded store, you get a frustrating lag.

Redux wasn’t designed with the opportunities native apps have, like multi-threading. And it wasn’t designed with the difficulties fully native apps have, like sharing some code among a separate mobile and desktop app, or having to do their heavy processing, database storage, etc., in-app, all while keeping the interface lightning fast.

Only when one chain lands at an interface component that is currently being used does it travel back up the tree and compute what it needs. But it only computes exactly what it needs, and this is all opaque to the code outside of the framework; it seems to work as though needed values have already been computed.

By declaring how each piece of state or interface reacts to other state changing, the framework is able to run each piece of your code only and exactly when it is needed.

Alex Obenauer at Medium.com
SwiftReactions Framework

Comments

Most Favorite Posts

Using Speech with iOS and Android: SiriKit, Voice Capabilities, Google Assistant

SiriKit SiriKit enables your iOS apps and watchOS apps to work with Siri, so users can get things done using just their voice. Your content and services can be used in new scenarios including access from the lock screen and hands-free use. Apps adopt SiriKit by building an extension that communicates with Siri, even when your app isn’t running. The extension registers with specific domains and intents that it can handle. For example, a messaging app would likely register to support the Messages domain, and the intent to send a message. Siri handles all of the user interaction, including the voice and natural language recognition, and works with your extension to get information and handle user requests. Apple Developer Adding Voice Capabilites Voice actions are an important part of the wearable experience. They let users carry out actions hands-free and quickly. Wear provides two types of voice actions: System-provided These voice actions are task-based and are built into ...

Titanium: Releasing Memory

- It’s true that you can’t manually manage your application objects’ reference count in iOS applications. There are, however, things you can do to free up memory – the big ones in the 1.x product are closing windows (which releases all UI resources associated with the window) and setting references to a proxy object (like one returned by Ti.UI.createXXX) to null, which will release the resources associated with that object. Why you should stay away from Titanium

CFPropertyList

The PHP implementation of Apple's PropertyList plist can handle XML PropertyLists as well as binary PropertyLists. It offers functionality to easily convert data between worlds, e.g. recalculating timestamps from unix epoch to apple epoch and vice versa. A feature to automagically create (guess) the plist structure from a normal PHP data structure will help you dump your data to plist in no time. github

Speed up your unit tests! Swap out your App Delegate for testing.

Faster, please One thing that can slow our tests down is if our App performs expensive tasks on startup and it is not unusual to place code that synchronizes with a server in our implementation of UIAppDelegate. Luckily for us there is a way to change the production App Delegate with a fake that does nothing. Objective-C class FakeAppDelegate: UIResponder, UIApplicationDelegate {   var window: UIWindow?   func application(application: UIApplication,     didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {     self.window?.rootViewController = UIViewController()     return true   } } let isRunningTests = NSClassFromString("XCTestCase") != nil if isRunningTests {   UIApplicationMain(Process.argc, Process.unsafeArgv, nil,     NSStringFromClass(FakeAppDelegate)) } else {   UIApplicationMain(Process.argc, Process.unsafeArgv, nil,     NSStringFromClass(AppDelegate)) ...

Leveraging your iPhone development expertise to build Windows Phone 7 applications

Assuming you are a happy coder, the joy of developing software all comes down to a few things: Building something cool that users will enjoy Getting rewards from users and recognition from peers Learning how to solve new challenges and build novel features. Even if you have a solid expertise on a particular platform/language, I think it is essential to be a “polyglot” developer. In other words, you might have a native or preferred language, but opening your mind to others can be very stimulating and will bring considerable value to your abilities and your resume. Jumping from one platform or language to another can introduce breaking changes in your habits, but ultimately change is very stimulating and will expand your opportunities. If you are a .NET developer, learning Windows Phone development is not really “change.” Instead, it is more of a continuum, where you just add new features to what you already know. If you are an iPhone developer, new to Windows Phone (and .NET), ...

CouchDB for iOS

A build of Apache CouchDB optimized for iPad, iPhone, and iPod Touch iOS-Couchbase CouchDB - Key Features Documents Views Schema-Free Distributed CouchDB is a peer based distributed database system. Any number of CouchDB hosts (servers and offline-clients) can have independent “replica copies” of the same database, where applications have full database interactivity (query, add, edit, delete). When back online or on a schedule, database changes are replicated bi-directionally. CouchDB has built-in conflict detection and management and the replication process is incremental and fast, copying only documents and individual fields changed since the previous replication. Most applications require no special planning to take advantage of distributed updates and replication. CouchDB