前言
在进行鸿蒙开发的过程中遇到过不少的坑,在这里记录一下,希望也能够其他需要进行鸿蒙开发的同事提供一些帮助。
数据类中的方法无法被调用
本人在鸿蒙开发中遇到的第一个坑是数据类中的方法无法被调用,在实际开发中,我们将接口请求进行了一层封装,使用泛型T来标识接口请求的返参类型。并且封装成ApiResponse,使用isSuccess方法来进行初步的请求状态判定。然而我很快发现isSuccess方法根本不起作用,打断点之后发现了TypeError: Cannot read property endsWith of undefined的问题,这里是说我们变量没有定义。
在向官方咨询后我才知道接口返回的变量是json形式的字符串,而不是泛型T的变量实例,所以能够拿到其中的属性值,但是拿不到其中定义的方法。官方也向我们提供了解决方案,那就是引入三方库class-transformer。
引入了三方库后,我们使用plainToInstance(cls, result.data)方法即可将json字符串转换成实体类,然后就可以调用类中的方法了。
单例模式拿不到类的对象
单例模式是我们在开发中经常用到的一种开发模式,它能够保证所有对象访问的都是唯一实例,同时节省了系统的性能开销,在鸿蒙开发中我们可以通过如下代码进行单例的创建
export class GlobalContext {
private constructor() {
}
private static instance: GlobalContext;
private _objects = new Map<string, Object>();
public static getContext(): GlobalContext {
if (!GlobalContext.instance) {
GlobalContext.instance = new GlobalContext();
}
return GlobalContext.instance;
}
getObject(value: string): Object | undefined {
return this._objects.get(value);
}
setObject(key: string, objectClass: Object): void {
this._objects.set(key, objectClass);
}
}
这里我遇到了第二个坑。通过上述方法创建单例是没有问题的,但是如果在单例类的构造器中有创建自定义类,一定要给自定义类中的变量增加初始值,否则就会出现拿不到单例实例的问题。
总结
上述两个问题就是我在鸿蒙开发过程中遇到的坑,希望也能够给各位有鸿蒙开发需求的朋友提供一些帮助。