gpt4 book ai didi

swift - 快速计算的属性 getter 可以改变结构吗?

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:10 26 4
gpt4 key购买 nike

我有一个包装 var data:[T] 的结构,它还提供了一些关于内部数组的统计信息。一个统计数据是最大值,这可能是一项昂贵的操作,因为它需要搜索每个元素以确定最大值——所以我想缓存最大值并仅在需要时重新计算它:

private mutating func getMax()->T? {
if let m=maxValue {
return m
}
else if data.count>0 {
maxValue=data.maxElement()
return maxValue
}
else {
return nil
}
}

作为一种方法,这似乎工作得很好,但我不知道如何做与计算属性相同的事情。

var max:T? {return getMax()}

导致提示访问器需要标记为“变异”,因为 getMax() 正在变异(实际上我将 getMax 代码放入属性访问器,但不重写此处代码更容易)。

Xcode 建议我这样重写代码:

var max:T? mutating {return getMax()}

然后标记另一个问题,Xcode 建议在变异之前放置一个分号,这导致建议在变异之后放置另一个分号,然后在变异之后放置另一个分号,很明显编译器甚至没有尝试提供帮助,只是有一个分号恋物癖。

有没有一种方法可以编写允许缓存值的计算属性,或者我是否坚持将其作为一种方法来编写?

最佳答案

尽管有编译器的建议,正确的语法应该是:

var max:T? {
mutating get {return getMax()}
}

关于swift - 快速计算的属性 getter 可以改变结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38233455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com