我试图弄明白如何在Swift中声明一个只在本地作用于函数的静态变量.

在C中,这可能看起来像这样:

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

在Objective-C中,基本相同:

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

但在Swift ,我似乎做不了这样的事.我try 过用以下方式声明变量:

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

但这些都会导致错误.

  • 第一个抱怨"静态属性只能在类型上声明".
  • 第二种抱怨"预期声明"(其中static是)和"预期模式"(其中timesCalledB是)
  • 第三个抱怨"一行中的连续语句必须用";"(在冒号和static之间的空格中)和"预期类型"(其中static是)
  • 第四个抱怨"一行中的连续语句必须用";"(在Intstatic之间)和"预期声明"(在等号下)隔开."

推荐答案

我认为Swift不支持静态变量而不将其附加到类/ struct .try 用静态变量声明私有 struct .

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

Swift相关问答推荐

多个提取来计算核心数据中的记录

什么是Swift Concurrency中任务组的正常退出

按Esc键时执行操作(工作表)

按SWIFT中每个ID的最大值进行筛选/排序

在SwiftUI中,我如何确保带有符号的单词不会被拆分为两行?

有条件地在同一视图上设置两个不同的过渡

将matchedGeometryEffect 应用于列表视图内的视图时,列表视图中的项目会受到影响 - SwiftUI

Swift ui 转换无法按预期工作

使用序列初始化字符串的时间复杂度是多少?

TimeZone 背后的目的

OSX 中的 Popover 无法确定透明度

减小SF符号的边框宽度

为什么这段Swift读写锁代码会导致死锁?

我怎样才能缩短(提高效率)这段代码?

是否可以使用 .task 修饰符更新基于两个值的视图

如何为 Swift UI 视图定义 struct ?

SwiftUI View Builder 参数无法更改状态

我们如何显示关于 UITextField 是 xCode Swift 的建议?

如何将使用\u{ea12}创建的 Swift 字符串转换回其十六进制值/字符串ea12?

Swift 动画 WithDuration 语法是什么?