[Swift实际操作]八、实用进阶-(1)Swift语言中的两种单例模式实际操作
本文降温你解析常见的单例模式。
单例模式可以保证一个类仅有一个实例,同时这个类还必须提供一个访问该类的全局访问点。
首先导入需要使用到的界面工具框架
import UIKit
单例对象保证了只有一个实例的存在,
这样有利于我们协调系统的整体行为。
final修饰符可以防止类被继承,还可以防止子类重写父类的属性、方法以及下标。
该修饰符不能修饰结构体和枚举。
1 final class SingleClass:NSObject 2 { 3 //使用static修饰符,定义一个静态常量。静态常量在实例调用结束后不会消失,并且保留原值, 4 //即其内存空间不会被释放。当下次调用实例时,仍然使用常量原有的值 5 static let sared = SingleClass() 6 //为了保持一个单例的唯一性,单例的构造器必须是private的。 7 //以防止其他对象也能创建出单例类的实例。 8 private override init(){ } 9 //添加一个实例方法,用来实现具体的业务功能 10 func say() 11 { 12 print("Hello,Strengthen!") 13 } 14 }
这样就完成了第一个单例模式的示例,当需要获得示例的对象时,只需调用其静态属性以获得单例对象。
然后调用单例对象的实例方法即可。
SingleClass.shared.say()
接着使用静态变量的方式,实现第二个单例模式。
1 final class SecondSingletonClass: NSObject 2 { 3 //使用static修饰符,定义一个静态变量,在第一个示例中定义的是一个静态常量 4 //static let sared = SingleClass() 5 static var shared: SecondSingletonClass() 6 { 7 //借助结构体来存储类型的变量(class var),并使用let修饰符来保证线程的安全 8 struct static 9 { 10 static let instance: SecondSinglectonClass = SecondSinglectonClass() 11 } 12 //然后返回结构体的静态常量 13 return Static.instance 14 } 15 //为了保证一个单例的唯一性,单例的构造器必须是私有的。 16 //以防止其他对象也能创造出单例类的实例 17 private override init(){ } 18 //同样添加一个实例方法,用来实现具体的业务功能 19 func say() 20 { 21 print("Hello,Strengthen!") 22 } 23 }
这样就完成了第二个单例模式的示例。当需要获得示例对象时,
只需调用其静态属性以获得单例对象,然后调用单例对象的实例方法即可。
SecondSingletonClass.shared.say()