滴水恩情 发表于 2024-10-29 03:25:05

HarmonyOS开发实战:基础组件使用-API

 1.基础类组件

模块介绍IdCardUtil提供对身份证校验系列方法IdUtil提供天生ID的一系列方法ArrayUtil提供对集合的一些常用的方法DateUtil提供对日期的一系列封装ObjectUtil提供对于对象的系列操作方法RandomUtil提供随机数的系列方法RegUtil提供对于常用正则表达式的方法StrUtil提供对于字符串的操作方法PhoneUtil提供常用的手机座机等判断OutDTO提供常用的返回实体对象CharUtil提供常用的字符操作CacheUtil提缓存数据而且提取数据操作Logger提供常用的打印日记的方法RegexConst提供常用的正则表达式常量DateConst提供常用的日期格式化表达式常量AuthUtil提供判断授权拉起授权的系列方法Base64Util提供字符串与Base64转换方法 1.IdCardUtil的方法



[*]isValidCard18 严格校验18位身份证号是否正确,校验规则如下
/**
   * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
   * 顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。
   * <li>第1、2位数字表示:所在省份的代码</li>
   * <li>第3、4位数字表示:所在城市的代码</li>
   * <li>第5、6位数字表示:所在区县的代码</li>
   * <li>第7~14位数字表示:出生年、月、日</li>
   * <li>第15、16位数字表示:所在地的派出所的代码</li>
   * <li>第17位数字表示性别:奇数表示男性,偶数表示女性</li>
   * <li>第18位数字是校检码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示</li>
   * 第十八位数字(校验码)的计算方法为:
   * <li>将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2</li>
   * <li>将这17位数字和系数相乘的结果相加</li>
   * <li>用加出来和除以11,看余数是多少</li>
   * <li>余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2</li>
   * <li>通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2</li>
   * @param idcard 待验证的身份证
   * @return 是否有效的18位身份证,忽略x的大小写
   */
    console.error(IdCardUtil.isValidCard18("781111199407190143").getMsg())
    //输出省份代码不正确:78

[*]convert15To18 将15位身份证号码转换成18位
    console.error(IdCardUtil.convert15To18("420106640901234").getDataRow());
    //输出 420106194201062348

[*]isValidCard15 校验15位身份证号码是否正确
console.error(IdCardUtil.isValidCard15("420106640901234").getMsg());
    //输出 身份证格式正确

[*]getProvinceCodeByIdCard 根据身份编号获取户籍省份编码,只支持15或18位身份证号码
    let province = IdCardUtil.getProvinceCodeByIdCard("142303111111111111");
    console.info(province.getSuccess() + "--" + province.getDataRow() + "--" + province.getMsg())
    //输出 true--140000--山西省

[*]getCityCodeByIdCard 根据身份编号获取地市级编码,只支持15或18位身份证号码
    let city = IdCardUtil.getCityCodeByIdCard("142303111111111111");
    console.info(city.getSuccess() + "--" + city.getDataRow() + "--" + city.getMsg())
    //输出 true--142300--吕梁地区

[*]getDistrictCodeByIdCard 根据身份编号获取区县级编码,只支持15或18位身份证号码
    let district = IdCardUtil.getDistrictCodeByIdCard("142303111111111111");
    console.info(district.getSuccess() + "--" + district.getDataRow() + "--" + district.getMsg())
    //输出 true--142303--汾阳市 点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击)渴望这一份鸿蒙学习资料可以或许给各人带来资助,有必要的小伙伴自行领取~~
2.DateUtil的方法



[*]parse 将输入的日期字符串转换为Date日期范例
console.error(DateUtil.parse("2023-01-01"))
    //输出Sun Jan 01 2023 08:00:00 GMT+0800

[*]formatDate 将传入的日期字符串按照传入的format举行格式化输出,不传默以为yyyy-MM-dd,日期格式化年代日时分秒为y-M-d HMs
   console.error(DateUtil.formatDate("2023/1/1"))
    //输出2023-01-01
    console.error(DateUtil.formatDate("2023/1/1",'yyyy-MM-dd HH:mm:ss'))
    //输出2023-01-01 00:00:00

[*]format 将日期范例的Date根据传入的format格式化成日期字符串(format必传)
    console.error(DateUtil.format(new Date,'yyyy-MM-dd HH:mm:ss'))
    // 输出 2024-01-03 20:25:58
    console.error(DateUtil.format(new Date,'HH:mm:ss'))
    // 输出 20:27:06

[*]dateDiff 盘算两个Date的日期差单位为天
    const difference = DateUtil.dateDiff(new Date('2023-01-01'), new Date('2023-01-10'));
    console.log(difference + ""); //输出 9

[*]strDateDiff 盘算两个字符串日期的差单位为天
    const diff = DateUtil.strDateDiff('2023-11-01 12:12:12', '2024-01-10 12:12:12');
    console.log(diff + ""); //输出 70 3.RegUtil的方法



[*]isMatch 给定内容是否匹配正则
    let res: OutDTO = RegUtil.isMatch(RegexConst.EMAIL, '111111');
    console.error(res.getSuccess() + "---" + res.getMsg());
    //输出 false---验证字符串格式不正确,请检查

[*]isEmailMatch 给定邮箱是否匹配正则
    let res: OutDTO = RegUtil.isEmailMatch('13191191111@163.com');
    console.error(res.getSuccess() + "---" + res.getMsg());
    //输出true---邮箱格式正确

[*]isMobileMatch 给定手机号是否匹配正则
   let res: OutDTO = RegUtil.isMobileMatch('21212');
    console.error(res.getSuccess() + "---" + res.getMsg());
    //输出false---手机号码格式不正确,请检查

[*]isIdCardMatch 给定身份证号是否匹配正则
    let res: OutDTO = RegUtil.isIdCardMatch('21212');
    console.error(res.getSuccess() + "---" + res.getMsg());
    //输出false---身份证号格式不正确,请检查 4.Logger的方法



[*]init 初始化第一个入参为应用名,第二个为域可不填
    Logger.init('测试应用')   建议将该初始化方式写在EntryAbility.ets的onWindowStageCreate方法中

[*]debug debug级别日记【入参为两个字符串,第一个为提示消息,第二个为错误缘故原由】绿色
    Logger.debug("debug错误原因为:", 'xxxxxxxxxxxx')

[*]info info级别日记【入参为两个字符串,第一个为提示消息,第二个为错误缘故原由】黄色
Logger.info("info错误原因为:", 'xxxxxxxxxxxx')

[*]warn warn级别日记【入参为两个字符串,第一个为提示消息,第二个为错误缘故原由】 白色
    Logger.warn("warn错误原因为:", 'xxxxxxxxxxxx')

[*]error error级别日记【入参为两个字符串,第一个为提示消息,第二个为错误缘故原由】 红色
Logger.error("error错误原因为:", 'xxxxxxxxxxxx') 5.ObjectUtil的方法



[*]equal 判断两个传入的数值大概是字符串是否相等
    console.error(ObjectUtil.equal("1", "1") + "")
    //输出 true

[*]notEqual 判断两个传入的数值大概是字符串是否不相等
    console.error(ObjectUtil.notEqual("1", "1") + "")
    //输出 false 6.AuthUtil的方法



[*]checkPermissions 校验是否已授权 【异步方法】
    //单次校验一个权限,入参为需要校验的权限
    let result = await AuthUtil.checkPermissions('ohos.permission.APPROXIMATELY_LOCATION');
    if (!result) {
   //此处可调用拉起授权方法
   ToastUtil.showToast('用户未授权~');
    } else {
      ToastUtil.showToast('用户已授权~');
    }

[*]reqPermissionsFromUser 拉起单个用户授权 【异步方法】 有callBack
   //拉起用户单个权限授权操作,第一个参数为需要授予的权限,第二个参数为用户授权回调
   AuthUtil.reqPermissionsFromUser('ohos.permission.APPROXIMATELY_LOCATION', (index: number) => {
      //用户同意授权index为1,用户拒绝授权index为-1,根据结果进行业务操作
      ToastUtil.showToast(index == 1 ? '授权成功' : '用户取消授权~');
   })

[*]reqPermissions 拉起单个用户授权 【异步方法】 无callBack
   //拉起用户单个权限授权操作,用户同意授权code为1,用户拒绝授权code为-1,根据结果进行业务操作
   let code = await AuthUtil.reqPermissions('ohos.permission.APPROXIMATELY_LOCATION');
   if (code<0) {
       //授权失败
       return OutDTO.ErrorByDataRow<string>('获取当前位置失败~', '用户拒绝授权精准定位,获取定位失败~');
   }

[*]reqPermissionsList 拉起组实用户授权 【异步方法】 无callBack
   //拉起组合用户授权操作,入参为需要授权的权限集合
   let code = await AuthUtil.reqPermissionsList(['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION']);
   //code为true表示权限集合均被授权,为false表示有权限未被授权
   if (!code) {
       //授权失败
       return OutDTO.ErrorByDataRow<string>('获取当前位置失败~', '用户拒绝授权精准定位,获取定位失败~');
   } 7.PhoneUtil的方法



[*]isMobile 验证是否为手机号码(中国)
   console.error(PhoneUtil.isMobile("17111114114").getMsg())
    // 输出 手机号为中国号码

[*]isMobileHk 验证是否为手机号码(香港)
    console.error(PhoneUtil.isMobileHk("111111").getMsg())
    // 输出 手机号非中国香港号码,请检查

[*]isMobileTw 验证是否为手机号码(台湾)
    console.error(PhoneUtil.isMobileTw("17111114114").getMsg())
    // 输出 手机号非中国台湾号码,请检查

[*]isMobileMo 验证是否为手机号码(澳门)
    console.error(PhoneUtil.isMobileMo("17111114114").getMsg())
    // 输出 手机号非中国澳门号码,请检查

[*]isTel 验证是否为座机号码(中国)
    console.error(PhoneUtil.isTel("17111114114").getMsg())
    // 输出 号码非中国座机,请检查

[*]isTel400800 验证是否为座机号码(中国)+ 400 + 800
    console.error(PhoneUtil.isTel400800("17111114114").getMsg())
    // 输出 号码非400800格式的座机,请检查

[*]isPhone 验证是否为座机号码+手机号码+ 400 + 800电话 + 手机号号码(香港)
    console.error(PhoneUtil.isPhone("17111114114").getMsg())
    // 输出 手机号为中国号码 8.CharUtil的方法



[*]isEmoji 判断是否为emoji心情符
    console.error(CharUtil.isEmoji(38)+"")
    // 输出 true

[*]isAscii 判断字符是否为ascii码
    console.error(CharUtil.isAscii("你")+"")
    // 输出 false 9.StrUtil的方法



[*]isBlank 判断字符串是否为空缺符(空缺符包括空格、制表符、全角空格和不停止空格)true为空,否则false
    console.error(StrUtil.isBlank(' ')+"")
    //输出true

[*]asString 将传入的值转换为字符串范例
    const obj:Record<string,string> = {'key': 'this is value'} // key的值类型为 string | undefined
    const test = StrUtil.asString(obj)

[*]isBlankIfStr 判断传入的对象是否是空格
    const a = StrUtil.isBlankIfStr(obj);

[*]isEmptyIfStr 判断传入的对象是否是空
    const a = StrUtil.isEmptyIfStr(obj);

[*]isNotBlank 判断字符串是否为非空缺符(空缺符包括空格、制表符、全角空格和不停止空格)true为非空,否则false
    console.error(StrUtil.isNotBlank('222')+"")
    //输出true

[*]trim 去除传入集合的每个值的前后空格
    console.error(StrUtil.trim([" 你好 "," hi","hello "]).join("----"))
    //输出 你好----hi----hello

[*]hasBlank 判断传入的字符串中是否包含有空值,只要有一个则返回true,否则false
    console.error(StrUtil.hasBlank("","232323")+"")
    //输出true

[*]isEmpty 判断传入的字符串是否为空,空缺符判断为非空
    console.error(StrUtil.isEmpty(' ')+"")
    //输出false

[*]camelCase 将字符串转换为驼峰
    console.error(StrUtil.camelCase("Foo Bar"))//输出 fooBar
    console.error(StrUtil.camelCase("--foo-bar--"))//输出 fooBar
    console.error(StrUtil.camelCase("__FOO_BAR__"))//输出 fooBar

[*]capitalize 转换字符串首字母为大写,剩下为小写
   console.error(StrUtil.capitalize("FooBar"))//输出Foobar

[*]endsWith 检查字符串是否以给定的字符串结尾
    console.error(StrUtil.endsWith('abc', 'b', 2) + "")//输出true

[*]repeat 重复 N 次给定字符串
    console.error(StrUtil.repeat("*", 5))//输出*****

[*]replace 更换字符串中匹配的正则为给定的字符串
    const str = 'Hello, World';
    console.log(StrUtil.replace(str, 'Hello', 'Hi')); // 输出:'Hi, World'
    console.log(StrUtil.replace(str, /world/i, 'Universe')); // 输出:'Hello, Universe'
    console.log(StrUtil.replace(str, //ig, 'X')); // 输出:'HXllX, WXXld'

[*]startsWith 检查字符串是否以给定的字符串卡头
    const str = 'Hello, World';
    console.log(StrUtil.startsWith(str, 'Hello') + ""); // 输出:true
    console.log(StrUtil.startsWith(str, 'World') + ""); // 输出:false
    console.log(StrUtil.startsWith(str, 'Hello', 7) + ""); // 输出:false
    console.log(StrUtil.startsWith(str, 'World', 7) + ""); // 输出:true

[*]toLower 转换整个字符串的字符为小写
    console.error(StrUtil.toLower('--Foo-Bar--')); //--foo-bar--

[*]toUpper 转换整个字符串的字符为大写
    console.error(StrUtil.toUpper('--Foo-Bar--')); //--FOO-BAR--

[*]truncate 截断字符串,如果字符串超出了限定的最大值。 被截断的字符串反面会以 omission 代替,omission 默认是 "..."
    const str = 'Hello, World';
    console.log(StrUtil.truncate(str)); // 输出:'Hello, World'
    console.log(StrUtil.truncate(str, { length: 5 })); // 输出:'Hello...'
    console.log(StrUtil.truncate(str, { length: 10, omission: '***' })); // 输出:'Hello, Wo***'
    console.log(StrUtil.truncate(str, { separator: ',' })); // 输出:'Hello, World'

    const longStr = 'This is a very long string that needs to be truncated';
    console.log(StrUtil.truncate(longStr, { length: 10 })); // 输出:'This is a ....'
    console.log(StrUtil.truncate(longStr, { length: 10, separator: ' ' })); // 输出:'This is a very...' 10.RandomUtil的方法



[*]randomStrBySize 根据传入的大小天生随机字符串
    RandomUtil.randomStrBySize(16);

[*]randomUnitBySize 根据传入的大小天生随机Uint8Array字节流
    RandomUtil.randomUnitBySize(16);

[*]generateIV 天生CBC模式的iv
   let iv = await RandomUtil.generateIV();

[*]randomBoolean 随机天生一个布尔值
    console.error(RandomUtil.randomBoolean()+"")
    //输出true/false

[*]randomChinese 随机天生一个汉字
    console.error(RandomUtil.randomChinese())
    //输出趐

[*]randomNumber 获得指定范围内的随机数,包含最小值,不包含最大值
    console.error(RandomUtil.randomNumber(1000,10000)+"")
    //输出3184

[*]randomInt 获得随机数number值
    console.error(RandomUtil.randomInt()+"")
    //输出842905298955385

[*]randomLimit 获得指定范围内的随机数 [0,limit) 不包括limit
    console.error(RandomUtil.randomLimit(100)+"")
    //输出54 11.ArrayUtil的方法



[*]append 将新元素添加到已有数组中 添加新元素会天生一个新的数组,不影响原数组
    let n = ArrayUtil.append(["1", "2", "3"], ["4"]);
    n.forEach(item => {
      console.error(item);
    })
    //输出1 2 3 4

[*]setOrAppend 将元素值设置为数组的某个位置,当给定的index大于数组长度,则追加
    let arr = ArrayUtil.setOrAppend<string>(["1212", "3232", "5345", "645654", "64564564x"], 2, "你好");
    console.error(JSON.stringify(arr))
    //输出["1212","3232","你好","645654","64564564x"]

[*]replace 将新元素插入到到已有数组中的某个位置
    let arr2 = ArrayUtil.replace<string>(["1212", "3232", "5345", "645654", "64564564x"], 1, "halo");
    console.error(JSON.stringify(arr2))
    //输出["1212","halo","5345","645654","64564564x"]

[*]filter 通过传入的filter实现来过滤返回必要的元素内容
    let pArr: Array<Person> = JSONUtil.parseArray('[{"name":"测试名称1","age":18,"birth":"2023-01-01"},{"name":"测试名称3","age":3,"birth":"2021-11-01 12:12:12" },{"name":"测试名称4","age":34,"birth":"2023-01-01 12:12:12" },{"name":"测试名称2","age":23,"birth":"2021-01-01 12:12:12" }]', DateConst.YMD_HLINE_HMS);
    let flter = ArrayUtil.filter<Person>(pArr, (item: Person) => item.name.includes("4"));
    console.error(JSON.stringify(flter))
    //输出[{"name":"测试名称4","age":34,"birth":"2023-01-01 12:12:12"}]

[*]reverse 反转数组,会变更原数组
    ArrayUtil.reverse<Person>(pArr);
    console.log(JSONUtil.toJSONString(pArr));
    //输出[{"name":"测试名称4","age":23,"birth":"2021-01-01 12:12:12"},{"name":"测试名称3","age":34,"birth":"2023-01-01 12:12:12"},{"name":"测试名称2","age":3,"birth":"2021-11-01 12:12:12"},{"name":"测试名称1","age":18,"birth":"2023-01-01 00:00:00"}]

[*]min 根据传入的数值字符串日期数组取最小值
    console.error(ArrayUtil.min<number>() + "")
    //输出2

[*]max 根据传入的数值字符串日期数组取最大值
    console.error(ArrayUtil.max<number>() + "")
    //输出899076

[*]distinct 去重数组中的元素,去重后天生新的数组,原数组不变
    let nArr = ArrayUtil.distinct<string, string>(["你", "helo", "哇哈哈哈", "212121", "2222", "哇哈哈哈", "你"], item => item);
    console.error(JSONUtil.toJSONString(nArr));
    //输出["你","helo","哇哈哈哈","212121","2222"]

[*]remove 移除数组中predicate返回为真值的全部元素,并返回移除元素组成的数组
    const array = ;
    const removed = ArrayUtil.remove(array, (value: number) => value % 2 === 0);
    console.log(JSONUtil.toJSONString(removed)); //
    console.log(JSONUtil.toJSONString(array)); //

[*]removeEmptyValues 去除集合中的空值
    console.error(JSONUtil.toJSONString(ArrayUtil.removeEmptyValues()))
    //输出

[*]union 创建一个按次序排列的唯一值的数组(注:arrays(数组)的并集,按次序返回,返回数组的元素是唯一的)
    const arr1 = ;
    const arr2 = ;
    const arr3 = ;
    const result = ArrayUtil.union(arr1, arr2, arr3);
    console.log(JSONUtil.toJSONString(result)); // 输出:

[*]defaultIfEmpty 集合为空时传入默认集合
let str: string[] = [];
    ArrayUtil.defaultIfEmpty(str, ["1", "32"]).forEach(item => {
      this.message += item + "、";
    })
    //输出 1、32

[*]isNotEmpty 集合是否为空集合,不空为true否则false
    let str: string[] = [];
    if (ArrayUtil.isNotEmpty(str)) {
      this.message = "不是空的";
    } else {
      this.message = "是空的"
    }
    //输出 是空的

[*]isEmpty 集合是否为空集合,空为true否则false
    let str: string[] = [];
    if (ArrayUtil.isEmpty(str)) {
      this.message = "是空的";
    } else {
      this.message = "不是空的"
    }
    //输出 是空的

[*]strValIsEmpty 集合中每个值都为空则返回true,否则返回false
    let str: string[] = ["", ""];
    if (ArrayUtil.strValIsEmpty(str)) {
      this.message = "是空的";
    } else {
      this.message = "不是空的"
    }

[*]strValIsNotEmpty 集合中只要有一个值不为空则返回true,否则返回false
    let str: string[] = ["1",""];
    if (ArrayUtil.strValIsNotEmpty(str)) {
      this.message = "不是空的";
    } else {
      this.message = "是空的"
    }
    //输出不是空的 12.CacheUtil的方法



[*]save 存储指定范例的数据(必须指定范例T) 第一个入参为key,第二个入参为待存入数据
//存入字符串<>中数据类型为必填
    CacheUtil.save<string>("str", "测试存入字符串");
    //存入对象T<>中数据类型为必填
    let person = new Person('测试', 12, new Date(), new User("uuid", "打撒吃的是草动次打次"));
    CacheUtil.save<Person>("tetObj", person);
    //存入对象集合<>中数据类型为必填
    let arrP = Array<Person>();
    arrP = new Person('test1', 1, new Date(), new User("uuid1", "user测试内容1"));
    arrP = new Person('test2', 2, new Date(), new User("uuid2", "user测试内容2"));
    arrP = new Person('test3', 3, new Date(), new User("uuid3", "user测试内容3"));
    CacheUtil.save<Array<Person>>("arrPerson", arrP);

[*]get 根据key获取指定范例的数据(必须指定范例T),入参为存入时的key
//获取字符串<>中数据类型为必填
    this.message = CacheUtil.get<string>("str");
    //获取对象T<>中数据类型为必填
    let p = CacheUtil.get<Person>("tetObj");
    this.message = p.name + p.age + p.user.id;
    //获取对象集合<>中数据类型为必填
    let newStr: string = '';
    let res = CacheUtil.get<Array<Person>>("arrPerson");
    res.forEach(item => {
      newStr += item.age + item.name + item.user.id + item.user.name;
    })
    this.message = newStr; 13.IdUtil的方法



[*]simpleUUID 天生32为UUID不带-
console.error(IdUtil.simpleUUID())
    //输出   076bb3b9db6f4ecb885dbdbdd2c29080

[*]fastUUID 天生36为UUID带-
    console.error(IdUtil.fastUUID())
    //输出628128FC-55CA-48B7-8EA0-5162848FDCEF

[*]fastSimpleUUID 天生32为UUID带-
    console.error(IdUtil.fastSimpleUUID())
    //输出56703FA1-0BB-503-D93-00E94A28422

[*]randomUUID 天生36为UUID带-,小写
    console.error(IdUtil.randomUUID())
    //输出600cddfb-1e88-4798-8987-bfb703be76ff 14.OutDTO的方法



[*]该对象有四个私有成员变量
//成功失败标识
private success: boolean;
//返回提示信息
private msg: string;
//返回单行数据
private dataRow?: T;
//返回数据集合
private dataTable?: Array<T>;

[*]OK 只必要返回成功提示消息时使用
    let res:OutDTO = OutDTO.OK("只返回提示消息~");
    console.error(res.getMsg()+"------"+res.getSuccess())
    //输出只返回提示消息~------true

[*]OKByDataRow 必要返回成功提示消息而且附带单行数据时使用
    let p: Person = JSONUtil.parseObject<Person>('{"name":"测试名称","age":18,"birth":"2024-01-03" }', 'yyyy/MM/dd HH:mm:ss')
    let res: OutDTO<Person> = OutDTO.OKByDataRow<Person>('成功过了~', p);
    console.error(res.getMsg() + "------" + res.getSuccess()+"-----"+res.getDataRow())
    //输出   成功过了~------true-----

[*]OKByDataTable 必要返回成功提示消息而且附带多行数据时使用
let pArr: Array<Person> = JSONUtil.parseArray('[{"name":"测试名称1","age":18,"birth":"2023-01-01"},{"name":"测试名称2","age":23,"birth":"2021-01-01 12:12:12" }]', DateConst.YMD_HLINE_HMS);
    let res = OutDTO.OKByDataTable<Person>('成功过了11111~', pArr);
    console.error(res.getMsg() + "------" + res.getSuccess()+"-----"+res.getDataTable().length)
    //输出成功过了11111~------true-----2

[*]Error 只必要返回失败提示消息时使用
let res:OutDTO = OutDTO.Error("只返回失败提示消息~");
    console.error(res.getMsg()+"------"+res.getSuccess())
    //输出 只返回失败提示消息~------false

[*]ErrorByDataRow 必要返回失败提示消息而且附带单行数据时使用
let p: Person = JSONUtil.parseObject<Person>('{"name":"测试名称","age":18,"birth":"2024-01-03" }', 'yyyy/MM/dd HH:mm:ss')
    let res: OutDTO = OutDTO.ErrorByDataRow<Person>("只返回失败提示消息~", p);
    console.error(res.getMsg() + "------" + res.getSuccess()+res.getDataRow())
    //输出只返回失败提示消息~------false

[*] getSuccess 获取成功失败标识
[*] setSuccess 设置成功失败标识
[*] getMsg 获取提示消息
[*] setMsg 设置提示消息
[*] getDataRow 获取单行数据
[*] setDataRow 设置单行数据
[*] getDataTable 获取多行数据
[*] setDataTable 设置多行数据
15.Base64Util的方法(1.1.13-rc.0+)



[*]encodeToStr 将Uint8Array转化为字符串-异步
let a = await Base64Util.encodeToStr(new Uint8Array(buffer.from().buffer));

[*]decode 将字符串转换为Uint8Array数组-异步
let c = await Base64Util.decode(a);

[*]encodeToStrSync 将Uint8Array转化为字符串-同步
let b = Base64Util.encodeToStrSync(new Uint8Array(buffer.from().buffer));

[*]decodeSync 将字符串转换为Uint8Array数组-同步
let d = Base64Util.decodeSync(b);
最后

有很多小伙伴不知道学习哪些鸿蒙开发技能?不知道必要重点把握哪些鸿蒙应用开发知识点?而且学习时频仍踩坑,终极浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 
点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击)渴望这一份鸿蒙学习资料可以或许给各人带来资助,有必要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必把握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模子、多端摆设、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技能知识点。



 鸿蒙(HarmonyOS NEXT)最新学习门路
https://i-blog.csdnimg.cn/blog_migrate/93c979462c2f6776b552e8d42521d9c8.png​
有了门路图,怎么能没有学习资料呢,小编也预备了一份连合鸿蒙官方发布条记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模子、资源分类…等知识点。
获取以上完整版高清学习门路,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonyOS Next 最新全套视频教程
https://i-blog.csdnimg.cn/blog_migrate/1615adbee6620c7ab5f9ff9c8717f9bb.png​
 《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
https://i-blog.csdnimg.cn/blog_migrate/f96a88a74813128e1530e4e3019ee879.png​
《鸿蒙开发基础》


[*]ArkTS语言
[*]安装DevEco Studio
[*]运用你的第一个ArkTS应用
[*]ArkUI声明式UI开发
[*].……https://i-blog.csdnimg.cn/blog_migrate/a7471ed423974112f9e6d24c7d036cca.png​
《鸿蒙开发进阶》


[*]Stage模子入门
[*]网络管理
[*]数据管理
[*]电话服务
[*]分布式应用开发
[*]关照与窗口管理
[*]多媒体技能
[*]安全技能
[*]任务管理
[*]WebGL
[*]国际化开发
[*]应用测试
[*]DFX面向未来计划
[*]鸿蒙系统移植和裁剪定制
[*]……
https://i-blog.csdnimg.cn/blog_migrate/c4814cf44a41e19b838a0676d4665a5f.png​
《鸿蒙进阶实战》


[*]ArkTS实践
[*]UIAbility应用
[*]网络案例
[*]……
https://i-blog.csdnimg.cn/blog_migrate/8107cce2a9b629ecb6698a532fec37ad.png​
大厂面试必问面试题
https://i-blog.csdnimg.cn/blog_migrate/54545dc24db55664221a0a114662baa7.png​
鸿蒙南向开发技能
https://i-blog.csdnimg.cn/blog_migrate/c8692deacd7801cfc886f2aeb5c9de68.png​
鸿蒙APP开发必备
https://i-blog.csdnimg.cn/blog_migrate/c510342c258bd907f950db431ae04b02.png​
鸿蒙生态应用开发白皮书V2.0PDF
https://i-blog.csdnimg.cn/blog_migrate/fd3ae1cb27c9387092ad0fe7c45608ee.png​

请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说,华为鸿蒙不再兼容安卓,对中年步伐员来说是一个挑衅,也是一个机会。只有积极应对变化,不停学习和提升本身,他们才气在这个厘革的时代中立于不败之地。 
                    https://i-blog.csdnimg.cn/blog_migrate/4a1cd0ec954837c17537ecbe1ab312b3.png




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HarmonyOS开发实战:基础组件使用-API