swift 创建单例模式

一、意图

保证一个类公有一个实例,并提供一个访问它的全局访问点。

二、使用场景

1、使用场景

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

2、实现的重要三个步骤

  • 私有化构造方法(Swift不支持)
  • 使用一个静态变量保存实例的引用
  • 提供一个全局的访问方法

三、 Swift语言下的实现

Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例。单例的创建有很多写法,Swift支持只有struct支持静态变量,class不支持静态变量,所以很容易想到,在类的内部使用struct就能解决引用的保存问题,代码如下:

class GlobalData: NSObject {
    struct Inner {
        static var instance: GlobalData?
        static var token: dispatch_once_t = 0
    }
    class var sharedInstance: GlobalData {
        dispatch_once(&Inner.token, { () -> Void in
            if Inner.instance == nil {
                Inner.instance = GlobalData()
            }
        })
        return Inner.instance!
    }
}
时间: 2024-10-31 05:06:23

swift 创建单例模式的相关文章

swift:创建表格UITableView

用swift创建单元格和用iOS创建单元格形式基本相同,就是语法上有些异样.swift中调用成员方法不再使用[ ]来发送消息,而是使用.成员方法的形式调用成员函数.这种格式非常类似于java中的点成员运算符.swift中对其他类的引用不用导入头文件.这里就不废话了,现在纯代码创建UITableview实例如下: 具体实例如下: 1.首先用swift创建一个工程Project 2.再用swift创建一个Person类,生成Person.swift文件 3.在Perosn.swift文件中将设置的属

OC与Swift创建pod

Cocoa pods 是iOS最常用的类库管理工具 OC的使用 删除源 sudo gem sources -r https://rubygems.org/ 添加源(使用淘宝的镜像,记住要用https) sudo gem sources -a https://ruby.taobao.org/ 查看是否使用的是淘宝镜像$ gem sources -l # 安装$ sudo gem install cocoapods # 安装成功之后,查看是否是最后版本(目前最新版本是1.0.1)$ pod --ve

使用OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

Android 创建单例模式的几种方法

java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.特点:1,一个类只能有一个实例2,自己创建这个实例3,整个系统都要使用这个实例 Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在.在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作.一些资源管理器常常设计成单例模式.外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中.每台计算

iOS开发——OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

Swift实战-单例模式

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式 单例模式Singleton具有如下优点: 多个模块共用同一个对象,保证了数据的唯一性 统一逻辑功能,具有较高的灵活性 在iOS开发中,本身也会接触到不少的系统单例,例如NSNotificaitonCente

[Swift] 创建一个对象

创建一个对象 先写一个People类 // // People.swift // Class // // Created by YouXianMing on 15/3/18. // Copyright (c) 2015年 YouXianMing. All rights reserved. // import Foundation class People { // 变量值 var name : String var age : Int // 初始化方法 init() { name = "YouX

Swift创建一个单例实例

假设一个ZLAnimal类. 我需要创建ta的时候保持单例 在oc中的做法 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[ZLAnimal alloc] init]; }); 在swift中的做法其实也类似,这里新建一个类,ZLAnimal类,提供快捷方法 class ZLAnimal: NSObject { class var sharedManager: ZLAnimal { stru

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