Swift进阶指南设计模式@IT·互联网

Swift - 单例的创建方法

2016-06-19  本文已影响220人  小黑Swift

在爪哇中的单例定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供

class singleClass: NSObject {
    var value = 0
    
    //方式一 全局变量
   static let singleDefault = singleClass()
    
    //方式二 使用GCD -> 单例
   class func shareDefault() -> singleClass {
        struct once {
            static var onceToken: dispatch_once_t = 0
            static var shareSingle:singleClass! = nil
        }
        dispatch_once(&once.onceToken) {
            once.shareSingle = singleClass()
        }
        return once.shareSingle
    }
    
    //方式三 使用结构体 -> 单例
   class func shareDefault2() -> singleClass {
        struct single {
            static var singleDefault = singleClass()
        }
        return single.singleDefault
    }
    
    private override init() {} //防止被再次实例化
}
/*
let single1 = singleClass.singleDefault
let single2 = singleClass.shareDefault()
let single3 = singleClass.shareDefault2()

单例

使用例子:比如在游戏中都有唯一一个游戏管理者统一管理加分之类的,多个的话就会出现数据不同步混淆混乱等

GameManager.Swift

public class GameManager {
    
    public var score = 0
    
    public static let defaultGameManager = GameManager()
    private init() { } //防止被初始化
    
    public func addScore() {
        score += 10
    }
}

-> 下面 gm1 与 gm2 都是指向同一个实例(相对于它的花名),并没有创建新的实例

let gm1 = GameManager.defaultGameManager
gameManager.addScore()
gameManager.score
// = 10

let gm2 = GameManager.defaultGameManager
gm.addScore()
gm.score

// = 20
上一篇下一篇

猜你喜欢

热点阅读