iOS中的设计模式(swift4版)

关于常用的iOS开发中的设计模式及其应用场景总结下:

1.单例模式

顾名思义,在程序的生命周期中只有一个这样的实例,单例可以全局访问,像 UserDefaults、UIApplication、NotificationCenter都是单例模式。

源码:

class Singleton {
    static let shareInstance = Singleton()
    private init(){
    }
}

2.委托模式

通过协议代理的方式实现,通常用于信息的回传,是一对一对象之间的通信。

import UIKit
//协议定义
protocol UserInfoDelegate {
    func returnName(userName: String)
    func returnAge(userAge: Int)
}

class UserInfoViewController: UIViewController {
    var delegate: UserInfoDelegate?//协议代理
    var name: String?
    var age: Int?
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    func infoDone(){
        //调用代理方法
        self.delegate?.returnName(userName: name!)
        self.delegate?.returnAge(userAge: age!)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

import UIKit

class FirstViewController: UIViewController,UserInfoDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    //协议方法
    func returnAge(userAge: Int) {
        print("age is \(userAge)")
    }
    func returnName(userName: String) {
        print("name is \(userName)")
    }
}

3.观察者模式

监听属性等的变化做出相应的改变。在Cocoa Touch 框架中,观察者模式的应用有两个:通知机制和KVO机制。

通知机制:

通知机制是一对多的对象之间的通信,对某个通知感兴趣的对象都可以注册成为接收者。
swift源码:(从ios9开始通知中心对观察者对象进行弱引用不需要手动从通知中心移除)

//定义通知名字常量
let notificationName = NSNotification.Name(rawValue: "updateUserInfo")
//注册监听通知
NotificationCenter.default.addObserver(self, selector: #selector(reloadUserInfo(notification:)), name: notificationName, object: nil)
@objc func reloadUserInfo(notification: NSNotification){
        print(notification.object!)
    }
//发送通知
NotificationCenter.default.post(name: notificationName, object: ["userName": name!, "userAge": age!])

你可能感兴趣的:(iOS中的设计模式(swift4版))