Swiftpack.co - happn-app/SemiSingleton as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by happn-app.
happn-app/SemiSingleton 2.1.0-beta.1
Simple thread-safe uniquing of objects
⭐️ 2
🕓 1 year ago
.package(url: "https://github.com/happn-app/SemiSingleton.git", from: "2.1.0-beta.1")


Platforms SPM compatible License happn

What is a Semi-Singleton?

You all know the Singleton pattern. A Semi-Singleton will be an object that will be returned as an already existing instance or a new one depending on whether there was already an instance in memory for the given id.

Here’s an example of a lifecycle of a Semi-Singleton object:

  • A first client (client1) requests a semi-singleton object with id obj. Such an object does not already exists: it is instantiated. client1 keeps a strong reference to this object for now.
  • A second client (client2) requests a semi-singleton object with id obj. As the object already exists in memory, the same instance client1 uses is returned.
  • Both client1 and client2 release the semi-singleton they share. It is fully deallocated.
  • A third client requests a semi-singleton object with id obj. As the previous semi-singleton with this id does not exist anymore, a new object is instantiated.

In code, a Semi-Singleton is any object conforming to the SemiSingleton or SemiSingletonWithFallibleInit protocol.

How to use a Semi-Singleton?

/* First you need a “Store” that will hold the reference to the existing semi-singletons. */
let semiSingletonStore = SemiSingletonStore(forceClassInKeys: true)
/* To retrieve a semi-singleton instance, you ask the store to give you one. */
let s: MySemiSingleton = semiSingletonStore.semiSingleton(forKey: key)

Use case

For instance, an “Action” object, when care should be taken that only one action run at the same time for the same subject. The subject would be the Semi-Singleton key. When the action is instantiated, if there is already an action in progress for the given subject, the already existing action will be returned, otherwise a new one is created.


This project was originally created by François Lamboley while working at happn.


Stars: 2
Last commit: 3 weeks ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

SemiSingleton 2.0.4
2 years ago

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics