HarmonyOS 鸿蒙Next @Builder中三元表达式报错
HarmonyOS 鸿蒙Next @Builder中三元表达式报错
@Component
export struct SearchTopView {
selectIndex:number
build() {
Stack() {
Image($r(‘app.media.home_top_bg’))
.width(‘100%’)
.height(‘300lpx’)
Column() {
//返回键+标签
Row() {
Image($r(‘app.media.next_icon_white’))
.width(‘80lpx’)
.padding(‘18lpx’)
.rotate({ centerX: ‘50%’,
centerY: ‘50%’,
angle: 180 //以中心点旋转180度
})
this.TabInfo({title:‘标签0’,index:0})
this.TabInfo({title:‘标签1’,index:1})
this.TabInfo({title:‘标签2’,index:2})
this.TabInfo({title:‘标签3’,index:3})
this.TabInfo({title:‘标签4’,index:4})
}
}
.margin({ top: ‘20lpx’ })
}
.alignContent(Alignment.TopStart)
}
@Builder TabInfo($$: {
title: string,
index: number
}) {
Column() {
Text($$.title)
.fontColor(’#ccc’)
.fontSize($$.index==this.selectIndex?‘34lpx’:‘28lpx’)
Divider()
.strokeWidth(‘10lpx’)
.color(’#fff’)
.visibility($$.index==this.selectIndex?Visibility.Visible:Visibility.Hidden)
}
}
}
@Builder中的 .visibility($$.index==this.selectIndex?Visibility.Visible:Visibility.Hidden)这句报错了。
报错内容是:[Compile Result] Cannot read properties of undefined (reading ‘kind’)
我试了一下就是$$.index==this.selectIndex对比出的问题。如果换成 .visibility(this.selectIndex==0?Visibility.Visible:Visibility.Hidden)就不报错了。
但是同样的是三元表达式用$$.index对比,上面的text就没事。但是换成visibility属性就不行。
请教是哪里的问题呢
这个问题和用的IDE版本有关,如果是最新DevEco Studio,要求先声明一个类包含title, index两个属性,[@Builder](/user/Builder)函数声明引用参数时用此类为类型而非一个{ }结构就可解决问题,Divider 和 Text 里有三元操作都可正常;旧版3.1里需要在.visibility中在判断部分加上括号,但Text.fontSize()里又不需要,可能是 visibility属性中有bug。
.visibility(($$.index==this.selectIndex) ? Visibility.Visible:Visibility.Hidden)
在HarmonyOS鸿蒙Next @Builder中遇到三元表达式报错的问题,这通常与表达式的语法、类型匹配或作用域有关。以下是一些可能的原因及解决方案概述:
-
语法错误:确保三元表达式的格式正确,即
条件 ? 结果1 : 结果2
。检查是否有遗漏的冒号、问号或括号。 -
类型不匹配:三元表达式的两个结果部分(结果1和结果2)必须能够隐式转换为相同的类型。如果类型不匹配,可能需要显式类型转换。
-
作用域问题:如果三元表达式中使用的变量或方法不在当前作用域内,也会导致编译错误。检查所有变量和方法是否已正确声明并在当前作用域内可见。
-
编译器版本:确保你使用的IDE和编译器版本支持你的代码语法。有时,特定版本的编译器可能存在bug,尝试更新到最新版本可能有助于解决问题。
-
特定语法限制:某些构建器或注解可能限制了三元表达式的使用。查阅相关文档以确认是否有此类限制。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html