Swift單例模式(Singleton)的實現


方案A:

通過類常量實現了延遲初始化和類型安全。

class SingletonA1 {    
    //global constant    
    static let sharedInstance = SingletonA1()
}

 

可以通過下面的方式在獲得實例前做些設置工作。

class SingletonA2 {
    //class constant
    static let sharedInstance: SingletonA2 = {

        let instance = SingletonA2()

        //setup code        
        //...

        return instance    
    }
}

 

方案B:

Swift1.2以前的版本不支類常量,可以用嵌套結構類型的方式實現。

class SingletonB {
    class var sharedInstance: SingletonB {
        struct Static {
            static let instance: SingletonB = SingletonB()
        }

        return Static.instance
    }
}

 

方案C:

Swift3.0以前的版本(dispatch_once在3.0中被廢棄)也可以使用傳統的Objective-C類似的方式實現。

class SingletonC {
    class var sharedInstance: SingletonC {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: SingletonC? = nil
        }

        dispatch_once(&Static.onceToken) {
            Static.instance = SingletonC()
        }

        return Static.instance!
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM