1. ホーム
  2. function

[解決済み] Swiftの静的関数変数

2023-01-31 18:08:25

質問

私はSwiftで関数に局所的にのみスコープされた静的変数を宣言する方法を見つけ出そうとしています。

C言語では、これは次のように見えるかもしれません。

int foo() {
    static int timesCalled = 0;
    ++timesCalled;
    return timesCalled;
}

Objective-Cでも、基本的には同じです。

- (NSInteger)foo {
    static NSInteger timesCalled = 0;
    ++timesCalled;
    return timesCalled;
}

しかし、私はSwiftでこのようなことを行うことができないようです。 私は以下の方法で変数を宣言してみました。

static var timesCalledA = 0
var static timesCalledB = 0
var timesCalledC: static Int = 0
var timesCalledD: Int static = 0

しかし、これらはすべてエラーになります。

  • 最初のものは "Static properties may only be declared on a type" を訴えます。
  • 2つ目は "期待される宣言" を訴えています (ここで static は)、"Expected pattern"は(ここで timesCalledB は)
  • 3つ目は、"1行の連続したステートメントは、';'"'で区切らなければならない(コロンと static の間のスペース)と "期待されるタイプ" (ここで static は)
  • 4つ目は、"1行の連続したステートメントは、';'で区切らなければならない "(間のスペースは、';'です。 Intstatic ) と "期待される宣言" (等号の下に)

どのように解決するのですか?

Swiftは、クラス/構造体にアタッチされていない静的変数をサポートしていないと思います。静的変数を持つプライベート構造体を宣言してみてください。

func foo() -> Int {
    struct Holder {
        static var timesCalled = 0
    }
    Holder.timesCalled += 1
    return Holder.timesCalled
}

  7> foo()
$R0: Int = 1
  8> foo()
$R1: Int = 2
  9> foo()
$R2: Int = 3