美文网首页
Swift开发+load与+initialize方法的实现

Swift开发+load与+initialize方法的实现

作者: 一滴矿泉水 | 来源:发表于2022-11-25 12:46 被阅读0次
    背景

    最近在做一个Swift项目,想在项目启动时做一些数据的初始化 ,怎奈Swift并没有OC 中的load和initialize方法,于是上网开扒寻找好解决方案,于是就有了下面的介绍。

    实现方式

    1、创建一个 OC 对象 NSSwiftLoadProtocol。
    2、在NSSwiftLoadProtocol.h文件内定义一个NSSwiftyLoadProtocol的协议,该协议的目的是在swift环境中接受load和initialize的回调。
    3、使用宏为每一个需要添加load方法或者initialize方法的Swift类,添加一个category分类,该分类是调用swift环境中extension扩展中实现了协议的swiftyLoad和swiftyInitialize方法的实际实现。

    #import <Foundation/Foundation.h>
    
    @protocol NSSwiftLoadProtocol <NSObject>
    @optional
    + (void)swiftLoad;
    + (void)swiftInitialize;
    @end
    
    #define SWIFTY_LOAD_INITIALIZE(className) \
    @interface className(swizzle_swifty_hook)\
    @end\
    \
    @implementation className(swizzle_swifty_hook)\
    + (void)load {if ([[self class] respondsToSelector:@selector(swiftLoad)]) {[[self class] swiftLoad];}}\
    + (void)initialize {if ([[self class] respondsToSelector:@selector(swiftInitialize)]) {[[self class]     swiftInitialize];}}\
    @end
    

    4、在NSSwiftLoadProtocol.m文件内导入Swift头文件,通过宏创建一个Swift类的分类

    #import "SwiftLoadProtocol.h"
    //导入swift
    #import <jining-Swift.h>
    SWIFTY_LOAD_INITIALIZE(MYNetworkConfig)
    

    5、Swift类MYNetworkConfig 遵循协议NSSwiftLoadProtocol 实现协议方法。

    extension MYNetworkConfig : NSSwiftLoadProtocol {
        public static func swiftLoad() {
            initNetworkConfig()
            initNetworkHeader()
            print("调用 MYNetworkConfig swiftLoad 方法初始化网络数据成功~~~")
        }
        public static func swiftInitialize() {
            print("调用 MYNetworkConfig swiftyInitialize 方法初始化成功~~~")
        }
    }
    

    6、允许Swift项目打印日志


    截屏2022-11-26 下午12.43.48.png

    至此功能实现完成 。


    文章持续更新中、希望对各位有所帮助、有问题可留言 大家共同学习.

    相关文章

      网友评论

          本文标题:Swift开发+load与+initialize方法的实现

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