- Swift 教程
- Swift - 首页
- Swift - 概述
- Swift - 环境
- Swift - 基本语法
- Swift - 变量
- Swift - 常量
- Swift - 字面量
- Swift - 注释
- Swift 运算符
- Swift - 运算符
- Swift - 算术运算符
- Swift - 比较运算符
- Swift - 逻辑运算符
- Swift - 赋值运算符
- Swift - 位运算符
- Swift - 其他运算符
- Swift 高级运算符
- Swift - 运算符重载
- Swift - 算术溢出运算符
- Swift - 恒等运算符
- Swift - 范围运算符
- Swift 数据类型
- Swift - 数据类型
- Swift - 整数
- Swift - 浮点数
- Swift - Double
- Swift - 布尔值
- Swift - 字符串
- Swift - 字符
- Swift - 类型别名
- Swift - 可选类型
- Swift - 元组
- Swift - 断言和前提条件
- Swift 控制流
- Swift - 决策制定
- Swift - if 语句
- Swift - if...else if...else 语句
- Swift - if-else 语句
- Swift - 嵌套 if 语句
- Swift - switch 语句
- Swift - 循环
- Swift - for in 循环
- Swift - while 循环
- Swift - repeat...while 循环
- Swift - continue 语句
- Swift - break 语句
- Swift - 穿透语句
- Swift 集合
- Swift - 数组
- Swift - 集合
- Swift - 字典
- Swift 函数
- Swift - 函数
- Swift - 嵌套函数
- Swift - 函数重载
- Swift - 递归
- Swift - 高阶函数
- Swift 闭包
- Swift - 闭包
- Swift - 逃逸和非逃逸闭包
- Swift - 自动闭包
- Swift 面向对象
- Swift - 枚举
- Swift - 结构体
- Swift - 类
- Swift - 属性
- Swift - 方法
- Swift - 下标
- Swift - 继承
- Swift - 重写
- Swift - 初始化
- Swift - 析构
- Swift 高级
- Swift - ARC 概述
- Swift - 可选链
- Swift - 错误处理
- Swift - 并发
- Swift - 类型转换
- Swift - 嵌套类型
- Swift - 扩展
- Swift - 协议
- Swift - 泛型
- Swift - 访问控制
- Swift - 函数与方法
- Swift - SwiftyJSON
- Swift - 单例类
- Swift 随机数
- Swift 不透明类型和装箱类型
- Swift 有用资源
- Swift - 在线编译
- Swift - 快速指南
- Swift - 有用资源
- Swift - 讨论
Swift - 单例类
单例类是一种特殊的类,它只有一个对象,并确保您的应用程序或程序使用该对象。如果您尝试创建另一个单例类的变量,您将收到错误。单例类易于使用,但它有一个主要的缺点,即全局访问,这意味着您可以通过共享类的实例在全局范围内访问单例类。
这使得它难以维护,可能导致并发问题等。因此,为了避免过度使用单例对象,我们使用依赖注入。依赖注入将单例对象传递到需要它的对象。
如果一个类依赖于单例,并且它们存在于不同的上下文中,那么您必须将单例导入到该上下文中,否则无法访问该单例。
语法
以下是单例类的语法:
class Name{ // body }
创建和访问单例类
我们可以像使用普通类一样使用“class”关键字创建单例类,但有一些不同的规则,它们是:
单例类应该有一个私有初始化器。
单例类应该有一个静态类型的对象。
私有初始化器
此私有初始化器阻止从类外部创建对象。如果您尝试在类外部创建对象,您将收到错误。要创建私有初始化器,我们将使用“private”关键字。
语法
以下是私有初始化器的语法:
private init(){}
示例
使用私有初始化器创建单例类的 Swift 程序。
import Foundation // Outer class class SingletonClass{ // Creating a private initializer private init(){} func show(){ print("Hello") } } // Creating object outside the class // We will get an error let myObject = SingletonClass() myObject.show()
输出
它将产生以下输出:
main.swift:16:16: error: 'SingletonClass' initializer is inaccessible due to 'private' protection level let myObject = SingletonClass()
此处,私有保护级别阻止我们在类外部创建对象。因此,要克服此错误,我们必须在类内部创建对象。
静态对象
如果我们在单例类中有一个静态对象,我们可以使用类名轻松访问该对象。要创建静态对象,我们使用“Static”关键字。
语法
以下是静态对象的语法:
static let objectName = className()
以下是访问静态对象的语法:
let variableName = className.objectName
示例
使用对象的单例类的 Swift 程序。
import Foundation // Singleton class class SingletonClass{ // Creating object outside the class static let myObject = SingletonClass() // Creating a private initializer private init(){} // Method func show(){ print("Hello I am Singleton Class") } } // Accessing the object let ob = SingletonClass.myObject // Accessing the method ob.show()
输出
它将产生以下输出:
Hello I am Singleton Class
单例类 | 普通类 |
---|---|
在程序的整个生命周期中只有一个实例。 | 可以有多个实例。 |
不允许您创建类的实例。 | 允许您使用其初始化器直接创建类的实例。 |
您可以借助提供对对象全局访问的共享属性和方法来访问实例。 | 您可以直接访问实例。 |
在创建对象方面灵活性较差,并且可以在代码的不同部分之间使用紧耦合。 | 在创建对象方面灵活性更强,并且可以在代码的不同部分之间允许松耦合。 |
由于全局状态和依赖项,测试单例类很困难。 | 测试普通类要容易得多。 |
广告