IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> swift CTMediator使用及注意事项 -> 正文阅读

[移动开发]swift CTMediator使用及注意事项

在这篇文章里,我主要说一下在Swift条件下的CTMediator的 使用。至于CTMediator的集成什么的都不说了。

CTMediator 广泛使用在 模块与模块之间的调用上,使得模块与模块的通讯更加便捷,耦合度更低。那么在同一个模块内要使用CTMediator 当然也是可以的,在这里我来做试验,就是在同一个模块内的。 不同模块内,使用的原理也是一样的。

如下图所示: 假如CTMediatorTest就是我们的模块化的模块,我们在该模块内要有 push 出LHLoginViewController的能力,这个时候需要注意如下两点
请添加图片描述
1、创建 CTMediator的类别。
在Swift中,类别创建好之后,并不是如上面展示的那样是 CTMediator+xxx的形势,只要创建一个类就好,在类中使用extention 去写类别,只是我们的oc习惯,使得生成的类名长这个样子
请添加图片描述
注意,这个类别 是用 public 修饰的
注意,这个类别 是用 public 修饰的
注意,这个类别 是用 public 修饰的
2、创建Action_xxx的类
这个类是我们的模块事件所在的类,可以有多个,一般我们一个模块定义一个。
注意: 该类一定是以 Action_ 开头的
注意: 该类一定是以 Action_ 开头的
注意: 该类一定是以 Action_ 开头的
注意:该类的 xxx 可以随意取名字,你想叫什么就叫什么,通常情况下,我们用模块名作为xxx,当前在主工程中,可以 这样定义 Action_safari

如下图:
请添加图片描述
该类使用 @objc 修饰的,该类中的所有方法也是@objc修饰的,所定义的方法中 的参数parma 前面 有个_ 一般情况下,这个_是必须加上的,否则调用的时候方法不识别。

3、swift 中使用的注意事项

①、中间件是swift类型时必须添加 kCTMediatorParamsKeySwiftTargetModuleName 参数,value为中间类所在的组件名称,中间类是oc类型不加。 如果没有添加这个参数,那么在Mediator中无法找到目标类。

var tempParma = [
            kCTMediatorParamsKeySwiftTargetModuleName:"safari"
            ] as [AnyHashable : Any]

value = safari 代表着我的主工程名称,在模块中为模块名称

②、CTMediator单利与中间件class类型不一致时,swift类中callback回调需要swift闭包与oc对象转换;

③、self.performTarget("second", action:.... second 代表着 Target_xxx 中的xxx 这个名字一定要相同

④、。。。。action: "LoginMoule_LHLoginController", par LoginMoule_LHLoginController代表着 方法名,如果在定义方法的时候 参数 parma 前面没有加 _ ,那么方法名就不应该这样写了,而应该写成 LoginMoule_LHLoginControllerWithParma

下面我把代码贴下面
Target_second 类


import UIKit

@objc class Target_second: NSObject {
    
    @objc func Action_LoginMoule_LHLoginController(_ parma : [AnyHashable : Any]) -> UIViewController{
        let login = LHLoginViewController.init()
        if let callback = parma["callback"] as? (String) -> Void  {
            callback("ctmediator text")
        }
        login.userinfo = parma
        return login
    }

}

CTMediator+TabSecond 类

import Foundation
import CTMediator
import UIKit

public extension CTMediator{
    func second_TestFunction(para: [AnyHashable : Any], callback:@escaping (String) -> Void) -> UIViewController{
        var tempParma = [
            kCTMediatorParamsKeySwiftTargetModuleName:"safari"
            ] as [AnyHashable : Any]
        tempParma.merge(para) { (key, vaule) -> Any in
            return key
        }
        tempParma.updateValue(callback, forKey: "callback")
        let vc = self.performTarget("second", action: "LoginMoule_LHLoginController", params: tempParma, shouldCacheTarget: false) as? UIViewController ?? UIViewController.init()
        
        return vc
    }
}

调用 :

@IBAction func MediatorTestAction(_ sender: Any) {
        let vc = CTMediator.sharedInstance().second_TestFunction(para: ["sdfas":"2334"]) { temp in
            print("result ---- \(temp)")
        }
        vc.hidesBottomBarWhenPushed = true
        self.navigationController?.pushViewController(vc, animated: true)
    }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:52:58  更:2021-12-02 16:54:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:35:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码