美文网首页
观察者模式

观察者模式

作者: 古月思吉 | 来源:发表于2017-11-28 15:06 被阅读0次

一、有参数的观察者模式:

<1>传递Object对象参数:

0.观察者对象宏定义:

let kAliPayNotificationName = Notification.Name("aliPayNotification")// 支付宝支付结果通知
let kAliPaySuccessNotificationObject = "aliPaySuccess"  //支付成功
let kAliPayFailNotificationObject = "aliPayFail"    //支付失败

1.添加观察者 & 监听方法实现 & 移除观察者:

//(1)添加支付宝支付结果观察者
NotificationCenter.default.addObserver(self, selector: #selector(aliPayNotificationAction(notification:)), name: kAliPayNotificationName, object: nil)

//(2)接收到通知的方法-支付宝支付结果
func aliPayNotificationAction(notification:Notification) {
    guard notification.object != nil else {
        return
    }
    if let notificationObjectStr = notification.object! as? String {
        if (notificationObjectStr == kAliPaySuccessNotificationObject) {
            print("支付成功!")
            self.title = "支付成功"
            self.view.addSubview(self.paySuccessView)
            self.view.bringSubview(toFront: self.paySuccessView)
        } else if (notificationObjectStr == kAliPayFailNotificationObject) {
            print("支付失败!")
            self.title = "支付失败"
            self.view.addSubview(self.payFailView)
            self.view.bringSubview(toFront: self.payFailView)
        } else {
            return
        }
    }
}

//(3)移除观察者
deinit {
    NotificationCenter.default.removeObserver(self)
}

3.发送通知:

if resultStatus == "9000" {//支付成功
    NotificationCenter.default.post(name: kAliPayNotificationName, object: kAliPaySuccessNotificationObject)
} else {//支付失败
    NotificationCenter.default.post(name: kAliPayNotificationName, object: kAliPayFailNotificationObject)
}

<2>传递userInfo参数:
0.观察者对象宏定义:

let kChineseAudioPlayPlayModelCheckNotice = Notification.Name("kChineseAudioPlayPlayModelCheckNotice")//音频播放方式切换的通知

1.添加观察者 & 监听方法实现 & 移除观察者:

//添加观察者
        NotificationCenter.default.addObserver(self, selector: #selector(sequenceTypeCheckNoticeAction(notification:)), name: kChineseAudioPlaySequenceTypeCheckNotice, object: nil)

//MARK: - 观察者监听方法
    func sequenceTypeCheckNoticeAction(notification:Notification) {
        guard notification.userInfo != nil else {
            return
        }
        if let notificationUserInfoDict = notification.userInfo! as? [String: AnyObject] {
            if let value = notificationUserInfoDict["playMode"] as? Int {
                self.sequenceType = AudioSequenceType(rawValue: value) ?? .order
                self.tableView.mj_header.beginRefreshing()
            }
        }
        return
    }

deinit {
        //移除观察者
        NotificationCenter.default.removeObserver(self)
    }

3.发送通知:

//发送通知
NotificationCenter.default.post(name: kChineseAudioPlayPlayModelCheckNotice, object: nil, userInfo: ["playMode": playMode.rawValue])

二、无参数的观察者模式:

let kloginSuccessNotice = Notification.Name("BookRoomRefreshData")
//发送通知
NotificationCenter.default.post(name: kloginSuccessNotice, object: nil)
//添加观察者
NotificationCenter.default.addObserver(self, selector: #selector(loginSuccessAction), name: kloginSuccessNotice, object: nil)
//在添加观察者VC,实现监测到通知后的动作方法
func loginSuccessAction() {
        loadData()
    }
//销毁观察者
deinit {
        NotificationCenter.default.removeObserver(self)
    }

三、添加系统通知的观察者:

//添加系统通知的观察者
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil )

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

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