HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

04-19 1355阅读 0评论

全局@Builder作为wrapBuilder的参数返回WrappedBuilder对象,实现 全局@Builder 可以进行赋值和传递。

说明:

从API version 11开始使用

接口说明

wrapBuilder是一个模板函数,返回一个WrappedBuilder对象。

declare function wrapBuilder(builder: (...args: Args) => void): WrappedBuilder;

同时 WrappedBuilder对象也是一个模板类。

declare class WrappedBuilder {
  builder: (...args: Args) => void;
  constructor(builder: (...args: Args) => void);
}

说明:模板参数Args extends Object[]是需要包装的builder函数的参数列表

使用方法

let builderVar: WrappedBuilder = wrapBuilder(MyBuilder)
let builderArr: WrappedBuilder[] = [wrapBuilder(MyBuilder)] //可以放入数组

限制条件

wrapBuilder方法只能传入 全局@Builder 方法。

wrapBuilder方法返回的WrappedBuilder对象的builder属性方法只能在struct内部使用。

使用场景1

将wrapBuilder赋值给globalBuilder,且把MyBuilder作为wrapBuilder参数,用来替代MyBuilder不能直接赋值给globalBuilder。

@Builder
function MyBuilder(value: string, size: number) {
  Text(value)
    .fontSize(size)
}
let globalBuilder: WrappedBuilder = wrapBuilder(MyBuilder);
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        globalBuilder.builder(this.message, 50)
      }
      .width('100%')
    }
    .height('100%')
  }
}

使用场景2

自定义组件Index使用ForEach来进行不同@Builder函数的渲染,可以使用builderArr声明的wrapBuilder数组进行不同@Builder函数效果体现。整体代码会较整洁。

@Builder
function MyBuilder(value: string, size: number) {
  Text(value)
    .fontSize(size)
}
@Builder
function YourBuilder(value: string, size: number) {
  Text(value)
    .fontSize(size)
    .fontColor(Color.Pink)
}
const builderArr: WrappedBuilder[] = [wrapBuilder(MyBuilder), wrapBuilder(YourBuilder)];
@Entry
@Component
struct Index {
  @Builder testBuilder() {
    ForEach(builderArr, (item: WrappedBuilder) => {
      item.builder('Hello World', 30)
    }
    )
  }
  build() {
    Row() {
      Column() {
        this.testBuilder()
      }
      .width('100%')
    }
    .height('100%')
  }
}

错误场景

function MyBuilder() {
}
// wrapBuilder必须传入被@Builder修饰的全局函数。
const globalBuilder: WrappedBuilder = wrapBuilder(MyBuilder);
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        globalBuilder.builder(this.message, 30)
      }
      .width('100%')
    }
    .height('100%')
  }
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

HarmonyOS 应用开发之wrapBuilder:封装全局@Builder


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1355人围观)

还没有评论,来说两句吧...

目录[+]