6

var data:[T]内部配列に関するいくつかの統計も提供する a をラップする構造体があります。1 つの統計は最大値です。これは、最大値を決定するためにすべての要素を検索する必要があるため、コストのかかる操作になる可能性があります。そのため、最大値をキャッシュし、必要な場合にのみ再計算したいと考えています。

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は、突然変異の前にセミコロンを置くことを提案します。これは、突然変異の後に別のセミコロンを置き、次に突然変異の後にさらに別のセミコロンを置くという提案につながります。

値のキャッシュを許可する計算されたプロパティを作成する方法はありますか、またはこれをメソッドとして作成するのに行き詰まっていますか?

4

1 に答える 1

14

コンパイラの提案にもかかわらず、正しい構文は次のようになります。

var max:T? {
    mutating get {return getMax()}
}
于 2016-07-06T21:08:25.690 に答える