IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)

LanguageModule(语言模块)

附上IFramework 下载地址:IFramewrok
IFramework QQ交流群:782290296

该模块主要封装的是各国语言之间的切换,最核心的类是:
1.LanguageModule 语言模块类
2.DelegateLanguageObserver 语言观察者类
3.LanPair 语言字段类

首先看到LanPair类
IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第1张图片
我已经写上注释了,其实每一个LuaPair对象,就是封装了一段文字,并记录这段文字所属的语言和唯一标识,之后切换语言也是以该唯一标识进行切换的。

在看到DelegateLanguageObserver (语言观察者类)
IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第2张图片

其实很好理解,刚才说的LanPair类就是以文字字段为单位的,而这个DelegateLanguageObserver类是管理LanPair的唯一标识在每种语言之间的切换。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第3张图片
切换语言类型,主要逻辑为当该观察者未被释放或暂停时,执行该观察者切换逻辑,也就是对应的委托函数,并记录当前切换的语言类型

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第4张图片
创建观察者对象时从模块中调用该方法进行初始化。并调用语言模块的绑定方法。该绑定方法下面会讲。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第5张图片
为观察者对象增加切换逻辑

最后看到LanguageModule(语言模块)
该类主要封装了对每个LanPair对象和观察者对象的管理。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第6张图片
这个类我们结合实际例子来看

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第7张图片
首先这里实例化了两个LanPair,也就是语言字段。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第8张图片
在Awake函数中创建了语言模块,并加载了上面的两个LanPair对象。我们看模块的Load方法是怎么实现的。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第9张图片
就是将加载进来的LanPair相应的保存到上面提到的观察者列表,字段字典等等里面,应该不难理解。

再回到Awake中的下一句,调用了CreateDelegateObserver函数,顾名思义,就是创建观察者,我们进到里面去看

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第10张图片
从对象池中取出一个观察者对象,并对该观察者进行初始化,这个初始化我们上面有提到,最后一步是调用语言模块的绑定方法Subscribe。
IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第11张图片
主要逻辑是将观察者对象存进字典,并去调用一次他的切换语言方法。这个方法上面有提到。
忘记的可以往上翻。然后返回观察者。
创建完了之后还去调用了Listen方法。继续进到listen方法

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第12张图片
增加观察者逻辑,上面也说了。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第13张图片
在Update函数中,他去更改了语言模块中的languge属性。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第14张图片
当用户修改了该属性,也就是切换语言的时候,他会去执行Publish方法。

IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第15张图片
IFramework 框架学习笔记 2021 (一): LanguageModule(语言模块)_第16张图片
该方法的主要逻辑是,
遍历所有的观察者,并在LuaPair字典中找到该观察者对应的唯一标识对应的语言字段存不存在。存在即调用他的切换语言方法(该方法上面有提到,自己翻),若没有找到,即判断该观察者的默认语言是否存在,存在即使用默认语言对应的字段。

主要逻辑就是这些。不喜勿喷

你可能感兴趣的:(笔记,程序人生,经验分享,其他)