在原来Swift的Sheet里还不能这么做中,提到也可以使用初始化函数。但是我在修改使用为初始化函数之后,代码运行却不符合预期。于是我询问AI:
使用初始化函数的方式之后,始终显示的是xtTransUnits.isEmpty == true的分支,这是为什么呢?
#AI回答
问题出在初始化器的实现方式上。当前的实现使用了立即执行的闭包来设置 xtTransUnits,但因为 @State 属性在初始化器中的特殊性,这种方式并不会正确地设置初始值。
修改建议如下:
struct AITranslationView: View {
// ... 其他属性 ...
init(trees: [Tree<IDTree>]) {
self.trees = trees
let allUnits = Xliff_Tool.getXTTransUnits(from: trees)
_xtTransUnits = State(initialValue: allUnits.filter { $0.target == nil || $0.target?.isEmpty == true })
}
}
关键修改点:
- 使用 _xtTransUnits = State(initialValue: ...) 来正确初始化 @State 属性
- 移除了立即执行闭包,改为直接赋值
- 保持过滤逻辑不变
这样修改后,xtTransUnits 将被正确初始化,视图也会显示正确的分支。