From Swift 3 you will not need to fiddle with dispatch_once anymore to write singletons, as explained here you will be able to build a singleton class leveraging the fact that global properties are guaranteed to be initialized atomically and that constants cannot be modified once they are set with a value.

Even in presence of multiple threads, our static and shared property will be initialized only by the first thread that tries to access the value and other threads will not be able to observe the value while is being set.