本文主要是介绍swift之单利的创建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
几中单利的创建方式:https://www.jianshu.com/p/230cc900948c
//单利的类
import UIKit
class LYBsingle: NSObject {
@objc var paraone:String?//单利的属性
internal static let instance = LYBsingle()
//必须保证init方法的私有性,只有这样,才能保证单例是真正唯一的,避免外部对象通过访问init方法创建单例类的其他实例。由于Swift中的所有对象都是由公共的初始化方法创建的,我们需要重写自己的init方法,并设置其为私有的。
private override init(){
print("create 单例")
}
//下面两个方法,如果累不是继承自NSObject,就不需要写
override func copy() -> Any {
return self }
override func mutableCopy() -> Any {
return self }
func single()
{
print("单例")
}
}
//创建单利,并给单利的属性赋值,调用单利的方法
import UIKit
class LYBDaikuanVC: LYBBaseVC {
override func viewDidLoad() {
super.viewDidLoad()
let single=LYBsingle.instance
let single1=LYBsingle.instance
let single2=LYBsingle.instance
single.single()
single1.single()
single2.single()
single.paraone="paraOne"//给参数赋值
print("\(single)--\(single1)--\(single2)--\(single.paraone!)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
---控制台打印的结果:
create 单例
单例
单例
单例
<FastappSwift.LYBsingle: 0x604000448d90>--<FastappSwift.LYBsingle: 0x604000448d90>--<FastappSwift.LYBsingle: 0x604000448d90>--paraOne
===============
Swift 实现
严格单例模式
大多数 Objective-C 的类都继承自 NSObject,而 Swift 的类可以继承自 NSObject 或者不继承。
继承自 NSObject
class SingletonClass: NSObject {
@objc var paraone:String?//单利的属性static let shared = SingletonClass()private override init() {}override func copy() -> Any {return self }override func mutableCopy() -> Any {return self }// Optionalfunc reset() {}
}
静态属性 shared 持有唯一的实例,对外公开。
重载 init() 方法,使其对外不可见,不可以在外部调用,防止在外部创建实例。
重载 copy()、mutableCopy() 方法,返回 self,防止在外部复制实例。这里也可以返回 SingletonClass.shared,效果是一样的,因为只有一个实例。只有 shared 能调用 copy()、mutableCopy() 方法,那么 self 就是 shared。写 self,代码比较简洁。
单例一旦创建,一直持有,不能手动销毁,但可以重置数据。如果需要的话,可以添加一个重置数据的方法 reset()。例如,当前用户退出登录,需要把当前用户实例的所有属性重置为默认值,防止数据错误。
不继承自 NSObject
class SingletonClass{static let shared = SingletonClass()private init() {}// Optionalfunc reset() {}
}
不继承自 NSObject 的类没有 copy()、mutableCopy() 方法,不需要重载。其他同上。
这篇关于swift之单利的创建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!