2017-09-27 4 views
0

私は、この構造体を使用します。スウィフトのStruct

struct Constants { 
    struct array { 
    static let fuel = [NSLocalizedString("Gasoline", comment: ""), 
          NSLocalizedString("Diesel", comment: ""), 
          NSLocalizedString("Hybrid", comment: ""), 
          NSLocalizedString("Electric", comment: ""), 
          NSLocalizedString("other", comment: "")] 
    } 
} 

私は他の場所で呼び出しConstants.array.fuelを行い、それが仕事の罰金です。 問題は、私がアプリケーション言語を変更すると、NSLocalizedStringが期待どおりに機能しないことです(私は古い翻訳を取得します)。 staticを使用している可能性があります。 他のビューコントローラではNSLocalizedStringが問題なく動作します。私はstaticを削除すると 、私が取得:

Instance member 'fuel' cannot be used on type 'Constants.array' 

任意のヘルプしてください。

答えて

3

問題はfuelプロパティは定数です。その初期化は一度だけ行われ、アプリケーションの全ライフタイム中は変更されません。

あなたは static var fuel: [NSLocalizedString] { return [NSLocalizedString("Gasoline", comment: ""), ...] }

でこの道をstatic letを交換することによってそれ算出されたプロパティを行うことができ、プロパティは、あなたがそれにアクセスするたびに計算されます。もちろん、定数の場合ほど速く動作しません。

+0

あなたが言ったように、それは定数と同じくらい速く動作しません。 exempleのために構造体をリセットする他の方法はありますか?さもなければ私はあなたの答えを受け入れます。あなたに感謝します。 – abdel

+0

@abdel 'nil'に設定したプライベートのオプションのプロパティを作ることができます。次に、プロパティを計算されたプロパティにします。プライベートプロパティが 'nil'の場合は、それを配列に設定して、ラップされていないプライベートプロパティを返します。言語を変更するときは、privateプロパティを 'nil'に再度設定して、次回の使用時に強制的に再計算されるようにしてください。 – JeremyP