当前位置: 首页 > 面试题库 >

Swift中的静态函数变量

叶恩
2023-03-14
问题内容

我试图弄清楚如何声明一个静态变量,其范围仅限于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)和“预期声明”(下等号)

问题答案:

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


 类似资料:
  • 问题内容: 以下代码在Swift 1.2中进行编译: 静态 函数和 类 函数有什么区别?我应该使用哪一个?何时使用? 如果我尝试定义另一个变量,它说: 类中尚不支持的类存储属性;您是说“静态”吗? 如果支持此功能,则 静态 变量和 类 变量之间有什么区别(即,当两者都在类中定义时)?我应该使用哪一个?何时使用? (Xcode 6.3) 问题答案: 和与类两者关联的方法,而不是一个类的实例。区别在于

  • 我找不到和之间的任何区别。据我所知,类静态函数不能被继承,struct也没有继承的选项。 请不要被类中的静态函数和类函数所混淆。 VS

  • 本文向大家介绍C++中静态成员函数与静态成员变量(static ),包括了C++中静态成员函数与静态成员变量(static )的使用技巧和注意事项,需要的朋友参考一下 C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习C语言的stati

  • 问题内容: 我可以在Swift库中看到这些定义: 定义为的成员函数与定义为的另一个成员函数有什么区别?仅仅是为了结构和枚举的静态功能,以及用于类和协议吗?还有其他应该知道的区别吗?在语法本身中具有这种区别的原理是什么? 问题答案: 是否仅将static用于结构和枚举的静态函数,将class用于类和协议? 那是主要区别。其他一些区别是类函数是动态调度的,并且可以被子类覆盖。 协议使用class关键字

  • 我可以在Swift库中看到这些定义: 定义为的成员函数和定义为的成员函数之间有什么区别?简单地说,是用于结构和枚举的静态函数,而是用于类和协议吗?还有什么其他的不同之处是你应该知道的吗?语法本身有这种区别的理由是什么?

  • 问题内容: 我正在尝试将以下Objective-C代码转换为Swift。在我的Objective-C代码中,有一个静态变量,可以从类方法中对其进行访问。 由于您无法从Swift的类函数中访问像这样声明的类型,因此我为此创建了一个存储属性。 我试图从这样的类函数中对其调用方法。 但是我得到这个错误 类型’[AnyObject]’的不可变值仅具有名为’removeAll’的变异成员 。 谁能告诉我此错