一尘不染

Swift中的静态函数变量

swift

我试图弄清楚如何声明一个静态变量,其范围仅限于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)和“期望的模式”(在哪里timesCalledB
  • 第三条抱怨“一行上的连续语句必须用’;’分隔(在冒号和之间的空格static)和” Expected Type”(在哪里static
  • 第四抱怨“上一个线必须被分开连续语句‘;’”(在之间的空间Intstatic)和“预期声明”(下等号)

阅读 606

收藏
2020-07-07

共1个答案

一尘不染

我不认为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
2020-07-07