Swiftui 速记?

Swiftui 速记?,swiftui,Swiftui,我来自React,我使用useMemo来确保一些计算不会执行得太频繁。在SwiftUI中,我将如何做类似的事情 考虑这个例子: struct MyView:View{ var记录:[记录] var body:一些观点{ 文本(“昂贵的摘要:\(self.expensiveSummary)”) } var费用摘要:字符串{ //根据记录,返回字符串 //包含记录摘要的 返回“” } } 有没有办法确保只有在我的记录数组更改时才调用我的expensiveSummary?我想我们可以创建一个包装器视

我来自React,我使用
useMemo
来确保一些计算不会执行得太频繁。在SwiftUI中,我将如何做类似的事情

考虑这个例子:

struct MyView:View{
var记录:[记录]
var body:一些观点{
文本(“昂贵的摘要:\(self.expensiveSummary)”)
}
var费用摘要:字符串{
//根据记录,返回字符串
//包含记录摘要的
返回“”
}
}

有没有办法确保只有在我的记录数组更改时才调用我的
expensiveSummary

我想我们可以创建一个包装器视图作为
equalable
。 (也许,我们可以使用
equalTableView
.equalTable()
修饰符?)

struct usemo:View,equalable{
let键:KeyType
让内容:(键类型)->视图类型
var body:一些观点{
内容(关键)
}
静态函数==(左:UseMoom,右:UseMoom)->Bool{
返回lhs.key==rhs.key
}
}
struct MyView:View{
@状态变量记录:[Int]=(数组)(1…10000)
@State var other=false
var body:一些观点{
VStack{
按钮(“更新其他”,操作:{self.other.toggle()})
Text(“Other:\(String(Other))”//每次都会调用它
按钮(“更新记录”,操作:{self.records.append(1)})
UseMemo(键:记录){输入键
//即使更新了“其他”,也不会调用此函数
//这在更新“记录”时调用
文本(“昂贵的摘要:\(昂贵的摘要)”)
}
//这将被称为每一次
文本(“昂贵的摘要:\(昂贵的摘要)”)
}
}
var费用摘要:字符串{
字符串(records.randomElement()!)
}
}
下面是帮助我的


这是内置的
equalTableView

struct MyView: EquatableView { ... }
只有当其属性(本例中为
记录
)发生实际更改时,才会重新计算
正文
,这将阻止重新计算
费用汇总

这不会避免对
正文
内部的
费用汇总
进行多次评估。如果需要缓存此类信息,通常应创建一个局部变量(尽管有时函数生成器语法不允许在不将部分代码提取到单独函数中的情况下进行此操作),或者在
init
中计算属性


作为一种风格,我建议不要让计算属性的评估过于昂贵。这是令人困惑的,因为属性语法通常表明操作是廉价的。相反,我建议这是一个函数,或者在
init

中计算一次,我们可以假设父视图正在传入
记录,并且发生了变化。