Here are three ways to implement a singleton pattern, which supports lazy initialization and thread safety
- Global variables
- Structure
- Dispatch_once
Global variables:
Global variables, not class variables, are used here because class variables are not supported
Private Let _singletonsharedinstance = Singleton () class Singleton { class var Sharedinstance:singleton { Return _singletonsharedinstance }}
Structure:
Unlike classes, structs can define static variables and, by using this method, promote static variables to class variables (this method is recommended before supporting class variables)
Class Singleton { class var Sharedinstance:singleton { struct static { static let Instance:singleton = Sin Gleton () } return static.instance }}
Dispatch_once:
The traditional OC approach to Swift's interface
Class Singleton { class var Sharedinstance:singleton { struct Static { static var oncetoken:dispatch_once_ t = 0 static var Instance:singleton? = Nil } dispatch_once (&static.oncetoken) { static.instance = S Ingleton () } return static.instance! }}
This paper is to organize and translate the original text.
Original link
Dispatch_once Singleton mode in Swift