Swift - 单例模式的实现

过去Swift要实现单例,无非是这三种方式:全局变量,内部变量和dispatch_once方式。但都略显繁琐。

后来从1.2版本起,Swift中添加了如 static let 和 static var 这样的类变量的支持,这样单例的实现又简化了许多。

下面提供两种比较好的单例写法。(要注意:不管哪种写法都要注意将init()方法私有化。因为在Swift中,所有对象的构造器默认都是
public,需要重写init让其成为私有的,防止其他对象使用这个类的默认的‘()‘初始化方法来创建对象。这里感谢网友nowIsFuture的提
醒。)

方法1:


1

2

3

4

5

6

7

8

9

10

11

12

class AppManager {

    private static let _sharedInstance = AppManager()

    

    class func getSharedInstance() -> AppManager {

        return _sharedInstance

    }

    

    private init() {} // 私有化init方法

}

//使用方式

AppManager.getSharedInstance()

方法2:


1

2

3

4

5

6

7

8

class AppManager {

    static let sharedInstance = AppManager()

    

    private init() {} // 私有化init方法

}

//使用方式

AppManager.sharedInstance

附:为什么需要保证INIT的私有化?

因为只有init()是私有的,才能防止其他对象通过默认构造函数直接创建这个类对象,确保你的单例是真正的独一无二。

因为在Swift中,所有对象的构造器默认都是public,所以需要重写你的init让其成为私有的。这样就保证像如下的代码编译报错,不能通过。


1

2

var a1 = AppManager() //确保编译不通过

var a2 = AppManager() //确保编译不通过

时间: 2024-10-06 08:40:42

Swift - 单例模式的实现的相关文章

从Objective-C到Swift 单例模式

在Objective-C中经常会用到单例模式.最常见的就是: [UIApplication sharedApplication].delegate 这里的sharedApplication就是一个返回单例的方法.所谓的单例模式也就是在整个APP.或者软件中只有这个类的这么一个对象.可以保存一些全局的设置等数据,达到单例对象变了整个app的全部设置都更新的效果. 忽略OC的代码,直接进入Swift代码. 第一种单例模式的实现: class Singleton1{ class var sharedI

Swift 单例模式实现及类方法

在开始单例模式之前我们先讲一下类方法.应为单例模式需要依靠类方法来实现 首先,我们知道类方法就是 直接使用类名来调用,无需生成对象,再去调用. 其实类方法的生成很简单,只需要给我们之前的对象方法用class关键字来修饰即可 我们来看一个示例 对象方法 func userName()->String{ return "zhangsan" } 类方法 class func userName()->String{ return "zhangsan" } 接下来

swift 单例模式

class ca{ var count = 1; static var instance:ca = ca(); class func GetInstance()->ca{ return instance; } } var a = ca.GetInstance(); var b = ca.GetInstance(); a.count = 2; println("\(a.count),\(b.count)");//2,2

iOS swift单例模式

普通的写法: class SwiftSingleton { class var shared: SwiftSingleton { if !Inner.instance { Inner.instance = SwiftSingleton() } returnInner.instance! } structInner { staticvar instance: SwiftSingleton? } } 但系统多个线程在执行,这种情况下就会创建多个实例,没有保证实例的唯一性.也可以修改成另外一种方式:

swift之单例模式

swift单例模式的几种方式: 1. 全局变量 private let _singleton = Singleton() class Singleton: NSObject { class var sharedInstance: Singleton { get { return _singleton } } } 2. 内部变量 class Singleton { class var sharedInstance: Singleton { get { struct SingletonStruct

Swift新手教程系列5-函数+selector在swift中的使用方法

原创blog.转载请注明出处 近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少. swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新 之前的教程 swift单例模式具体解释-线程安全,多核性能 swift新手教程4-集合(Array,Dictionary) swift新手教程3-字符串String swift新手教程2-运算符 swift新手教程1-准备知识 在swift中,函数有keywordfunc声明 格式 func 函数名(參数1,參数2,...)-

Swift学习: 从Objective-C到Swift

文章组织脉络: 从Objective-C到Swift的语法差异.我们熟悉的Objective-C特性在Swift中如何展现. 从Objective-C到Swift的进步改进.研究对比Swift在安全性,易用性上的提升,给我们带来的新编程范式. 目录: 1.属性(property)和实例变量(instance variable) 2.控制流 3.函数 4.类与初始化(Initializers) 5.枚举与结构体 6.协议(Protocols) 7.Swift与Cocoa 8.总结 1.属性(pro

swift语言实现单例模式

Swift实现单例模式 单例模式在各个语言中都有实现,swift语言推出已经几天了.通过这几天的看文档.特奉上写的Swift的单例实现,供大家学习交流,欢迎指正. ---若转载请注明出处,本人Github博客新地址- YueRuo's Blog - http://yueruo.github.io --- 因为Swift语言弱化了struct和class之间的界限,这里我分别给出自己写的两种的单例实现 class版本号: class SwiftSingleton{ class func share

Swift中的dispatch_once 单例模式

以下有三种方法实现单例模式,支持懒初始化和线程安全 全局变量 结构 dispatch_once 全局变量: 这里使用了全局变量而非类变量,是因为不支持类变量 private let _SingletonSharedInstance = Singleton() class Singleton { class var sharedInstance : Singleton { return _SingletonSharedInstance } } 结构: 与类不同,结构可以定义静态变量,通过使用此方法