HarmonyOS鸿蒙Next中创建一个模型怎么样能快一点,现在能累死个人

HarmonyOS鸿蒙Next中创建一个模型怎么样能快一点,现在能累死个人

@ObservedV2
class CardLayoutItem{

  @Trace title?: ResourceStr
  @Trace value?: ResourceStr

  titleFontSize: number = 13
  titleFontColor: ResourceColor = $r('app.color.Color000018')
  titleFontWeight: FontWeight = FontWeight.Normal

  valueFontSize: number = 18
  valueFontColor: ResourceColor = $r('app.color.Color000018')
  valueFontWeight: FontWeight = FontWeight.Bold

  constructor(
    title: ResourceStr,
    value: ResourceStr = '',
    titleFontSize: number = 13,
    titleFontColor: ResourceColor = $r('app.color.Color000018'),
    titleFontWeight: FontWeight = FontWeight.Normal,
    valueFontSize: number = 18,
    valueFontColor: ResourceColor = $r('app.color.Color000018'),
    valueFontWeight: FontWeight = FontWeight.Bold
  ) {
    this.title = title
    this.value = value
    this.titleFontSize = titleFontSize
    this.titleFontColor = titleFontColor
    this.titleFontWeight = titleFontWeight
    this.valueFontSize = valueFontSize
    this.valueFontColor = valueFontColor
    this.valueFontWeight = valueFontWeight
  }
}

这个是我定义的一个模型,假如我创建这个模型的时候,我只需要改变 title 以及 titleFontSize这两个字段,有类似kotlin中这种 Model(title = “”, titleFontSize = “”) 创建方式吗


更多关于HarmonyOS鸿蒙Next中创建一个模型怎么样能快一点,现在能累死个人的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

使用静态工厂方法

你可以在 CardLayoutItem 类内部定义一些 静态方法,用来快速创建你常用的实例,比如只传 title 和 titleFontSize,其他用默认值。

@ObservedV2
class CardLayoutItem {
  @Trace title?: ResourceStr
  @Trace value?: ResourceStr

  titleFontSize: number = 13
  titleFontColor: ResourceColor = $r('app.color.Color000018')
  titleFontWeight: FontWeight = FontWeight.Normal

  valueFontSize: number = 18
  valueFontColor: ResourceColor = $r('app.color.Color000018')
  valueFontWeight: FontWeight = FontWeight.Bold

  constructor(
    title: ResourceStr,
    value: ResourceStr = '',
    titleFontSize: number = 13,
    titleFontColor: ResourceColor = $r('app.color.Color000018'),
    titleFontWeight: FontWeight = FontWeight.Normal,
    valueFontSize: number = 18,
    valueFontColor: ResourceColor = $r('app.color.Color000018'),
    valueFontWeight: FontWeight = FontWeight.Bold
  ) {
    this.title = title
    this.value = value
    this.titleFontSize = titleFontSize
    this.titleFontColor = titleFontColor
    this.titleFontWeight = titleFontWeight
    this.valueFontSize = valueFontSize
    this.valueFontColor = valueFontColor
    this.valueFontWeight = valueFontWeight
  }

  // ✅ 静态工厂方法:只设置 title 和 titleFontSize
  static createWithTitleAndSize(
    title: ResourceStr,
    titleFontSize: number,
  ): CardLayoutItem {
    return new CardLayoutItem(title, '', titleFontSize)
  }

  // 你可以继续添加更多快捷方法,比如:
  // static createFull(...) { ... }
}
// 只传 title 和 titleFontSize,其他默认
const item = CardLayoutItem.createWithTitleAndSize('我的标题', 16)

这样你就不需要每次都写一长串参数,而是通过语义化的方法名快速构造对象,代码可读性也更高。

更多关于HarmonyOS鸿蒙Next中创建一个模型怎么样能快一点,现在能累死个人的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1.想给任意的参数 不按照顺序给参是否可以,感觉回到写java了

里面给一个对象就不会了

2.创建类的时候使用快捷键Alt+Insert可以快速的重构生成方法

可以通过构造参数对象化的方式优化模型创建,实现类似Kotlin具名参数的简洁写法。

1/定义参数接口类型:将参数定义为独立接口类型,明确可选项

interface CardConfig {
  title?: ResourceStr,
  value?: ResourceStr,
  titleFontSize?: number,
  titleFontColor?: ResourceColor,
  titleFontWeight?: FontWeight,
  valueFontSize?: number,
  valueFontColor?: ResourceColor,
  valueFontWeight?: FontWeight
}

2/重构构造函数:使用对象参数合并默认值

@ObservedV2
class CardLayoutItem {
  @Trace title?: ResourceStr
  @Trace value?: ResourceStr
  titleFontSize: number = 13
  titleFontColor: ResourceColor = $r('app.color.Color000018')
  titleFontWeight: FontWeight = FontWeight.Normal
  valueFontSize: number = 18
  valueFontColor: ResourceColor = $r('app.color.Color000018')
  valueFontWeight: FontWeight = FontWeight.Bold
  constructor(config: CardConfig) {
    // 合并传参与默认值
    this.title = config.title ?? '';
    this.value = config.value ?? '';
    this.titleFontSize = config.titleFontSize ?? this.titleFontSize;
    this.titleFontColor = config.titleFontColor ?? this.titleFontColor;
    this.titleFontWeight = config.titleFontWeight ?? this.titleFontWeight;
    this.valueFontSize = config.valueFontSize ?? this.valueFontSize;
    this.valueFontColor = config.valueFontColor ?? this.valueFontColor;
    this.valueFontWeight = config.valueFontWeight ?? this.valueFontWeight;
  }
}

3/使用方式:创建实例时仅需指定需修改的字段

const item = new CardLayoutItem({
  title: $r('app.string.myTitle'),
  titleFontSize: 16
});

有个根据Interface直接生成Class的命令行工具,楼主看看行不行interface2class

ts层面的问题AI就能搞定, 这里就不贴AI回复了, 总之就是把参数改成一个interface,其中可以有带问号的非必填参数,

cke_591.png

我不清楚这里是否允许直接复制粘贴AI给的代码,我意思是这个是ts的问题,AI很容易解答,,

Studio自带的那个Ai吗? 坦白讲有有些时候Ai就是在瞎编,复制下来跑不了,

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

想给任意的参数 不按照顺序给参是否可以,感觉回到写java了,巨累

在HarmonyOS Next中,使用ArkTS语言结合DevEco Studio的代码模板和低代码开发功能可显著提升模型创建效率。通过IDE内置的UI组件拖拽和可视化布局工具,可快速构建模型界面。利用系统提供的标准化API和组件库,减少手动编码量。同时,开启实时预览功能即时查看模型效果,避免重复编译。

在HarmonyOS Next中,可以通过使用TypeScript的对象字面量语法结合构造函数的默认参数来实现类似Kotlin的命名参数效果。虽然ArkTS目前不支持直接的命名参数语法,但可以通过以下方式优化模型创建:

  1. 使用对象字面量作为构造函数参数:
interface CardLayoutOptions {
  title: ResourceStr;
  value?: ResourceStr;
  titleFontSize?: number;
  // ...其他可选参数
}

@ObservedV2
class CardLayoutItem {
  // 属性定义保持不变...

  constructor(options: CardLayoutOptions) {
    this.title = options.title;
    this.value = options.value ?? '';
    this.titleFontSize = options.titleFontSize ?? 13;
    // 其他属性赋值...
  }
}
  1. 创建实例时:
const item = new CardLayoutItem({
  title: '示例标题',
  titleFontSize: 16
});

这种方式可以只设置需要修改的字段,其他字段使用默认值,减少代码量并提高可读性。

回到顶部