Swift 1.2之前要实现单例,无非就是这三种方式:全局变量,内部变量和 dispatch_once 方式。但是1.2之后,Swift中就添加了 static let 和 static var 这样的类变量的支持,使得单例的实现简化了很多。
//方法一
classAppShared {
privatestaticlet_sharedInstance =AppShared()
classfuncsharedInstance() ->AppShared{
return _sharedInstance
}
private init() {}//私有化init方法
}
//使用方式AppShared.sharedInstance()
//方法二
classAppShared2 {
staticletsharedInstance =AppShared2()
private init() {}//私有化init方法
}
//使用方式AppShared2.sharedInstance
重点:为什么要保证init的私有化?因为只有init()是私有的,才能防止其他对象通过默认构造函数对这个类对象直接创建,确保单例是独一无二的。在Swift中,所有对象的构造器默认都是public,所以需要重写init让它成为私有的。另外,也可以使不规范的写法报错,如var a1 = AppShared2() ,就会编译报错,不能通过。