美文网首页
Swift 的单例

Swift 的单例

作者: 小旗_96e8 | 来源:发表于2020-05-05 21:16 被阅读0次

第一步 创建 SingleTest static let shareInstance = SingleTest()

class Singleton {

static let sharedInstance = Singleton()

}

 第二步 使用 SingleTest.shareInstance.getString()

 第三步 验证是否唯一 let str = SingleTest.shareInstance

1.单例的具体代码:

ViewController :

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white

        let str = SingleTest.shareInstance

        print(Unmanaged.passUnretained(str).toOpaque() ) // 打印内存地址 

        // 单例的使用

        print(SingleTest.shareInstance.getString())

        //全局的一些东西.

        // 登陆成功记住用户名

        username = "bdgt"

        print(username)

        // 打印枚举

        print(alldata.loginUrl.rawValue)

        makeBtn()

        // Do any additional setup after loading the view, typically from a nib.

    }

    func makeBtn() {

        let btn = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 40))

        btn.setTitle("btn", for: UIControlState.normal)

        btn.backgroundColor = UIColor.lightGray

        btn.addTarget(self, action: #selector(btnClick), for: UIControlEvents.touchUpInside)

        self.view.addSubview(btn)

    }

    @objc func btnClick(){

    print("ddd")

        let vc = SecondViewController.init()

        present(vc, animated: true, completion: nil)

    }

    func changeString(newString: String) { // 第六步: 遵守协议

        print(newString)

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}

SecondViewController:

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let str = SingleTest.shareInstance

        print(Unmanaged.passUnretained(str).toOpaque() )  // 打印内存地址

        self.view.backgroundColor = UIColor.lightGray

        makeBtn()

        // Do any additional setup after loading the view.

    }

    func makeBtn() {

        let btn = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 40))

        btn.setTitle("返回", for: UIControlState.normal)

        btn.backgroundColor = UIColor.lightGray

        btn.addTarget(self, action: #selector(btnClick), for: UIControlEvents.touchUpInside)

        self.view.addSubview(btn)

    }

    @objc func btnClick(){

        print("ddd")

        dismiss(animated: true) {

            print("1")

        }

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}

SingleTest:

import UIKit

var username = "" //全局的,可以存储一些必备的.

enum alldata : String{  // 枚举  可以存储 接口

    case loginUrl = "http://www.dansdasda/login"

    case right = "右边"

}

class SingleTest {

    static let shareInstance = SingleTest()

    func getString() -> String {

        // 例如  获取当前的时间, 按照一定的格式,在这里写好之后, 所有的地方就都可以调用这里的了.

        return "共有方法,此处获取数据"

    }

}

/*第一种,类常量 Class constant , 建议使用    支持赖加载 线程安全

class Singleton  {

static let sharedInstance = Singleton()

}

*/

/*第二种  嵌套结构体变量格式

class Singleton {

class var sharedInstance: Singleton {

struct Static {

static let instance: Singleton = Singleton()

}

return Static.instance

}

}

*/

/* 第三种最不建议,但是最想oc 的创建方式  dispatch_once

class Singleton {

class var sharedInstance: Singleton {

struct Static {

static var onceToken: dispatch_once_t = 0

static var instance: Singleton? = nil

}

dispatch_once(&Static.onceToken) {

Static.instance = Singleton()

}

return Static.instance!

}

}

*/

相关文章

  • swift语法-14单例

    swift语法-14单例 OC中单例 Swift中单例 简写 Swift中最长用的方法

  • 单例模式的书写

    ARC OC 中的单例 根据OC单例 改写成 Swift 中的单例 OC调用swift,需要#import "单例...

  • 单例

    普通的 GCD单例 swift单例

  • iOS - 单例创建

    Swift创建单例 代码如下:Swift5 对应OC创建单例

  • iOS 单例

    Objective-C 单例宏 Swift 单例声明

  • Swift中的单例

    转战swift有几天了,接触到了swift中的单例,下面介绍一下swift中的单例: 仿照OC中的单例的写法,写一...

  • 单例

    //单例 // Swift 1.2后,可以使用类变量 // Swift 1.2之前单例的写法 /* class M...

  • Swift的单例模式及如何处理并发访问

    Swift的单例模式 Swift有两种方式实现单例模式 1、全局常量 2、类型常量 处理单例模式的并发访问 1、多...

  • 单例

    内存中只有一个对象实例 提供一个全局访问点 OC中的单例 swift中的单例 swift改进过的单例

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

网友评论

      本文标题:Swift 的单例

      本文链接:https://www.haomeiwen.com/subject/qlbvghtx.html