iOS开发中过程中最熟悉的设计模式应该是单例模式,例如NotificationCenter通知中心、Application应用,FileMange文件处.Objective-C中实现单例通过dispatch_once实现,Swift实现单例反而比较简单,只需要一行代码.
核心代码:
<pre><code>`let sharedData = StudyManager()
class StudyManager {
static let sharedInstance:StudyManager = StudyManager()
class var shared: StudyManager {
return sharedData
}
}`</code></pre>
常用的是定义一个静态变量:
<pre><code>static let sharedInstance:StudyManager = StudyManager()
</code</pre>
第二种方式定义Class类型的变量:
<pre><code>class var shared: StudyManager { return sharedData }
</code></pre>
测试代码:
<pre><code>` let student1:StudyManager = StudyManager.sharedInstance
let student2:StudyManager = StudyManager.sharedInstance
print("\(address(o: student1))---\(address(o: student2))")
let stu1 = StudyManager.shared
let stu2 = StudyManager.shared
print("单例:\(address(o: stu1))---\(address(o: stu2))")`</code></pre>
打印地址有两种方式:
<pre><code>print(Unmanaged.passUnretained(student1).toOpaque())
</code></pre>
<pre><code>func address<T: AnyObject>(o: T) -> String { return String.init(format: "%018p", unsafeBitCast(o, to: Int.self)) }
</code></pre>
单例模式可以让多个模块共用同一个对象,保证了数据的唯一性,而且可以统一逻辑功能,具有较高的灵活性.