在Objective C中使用静态变量非常方便(静态变量'值在所有函数/方法调用中保持),但是我找不到这样的东西在斯威夫特。
有这样的东西吗?
这是C:
中静态变量的一个例子void func() {
static int x = 0;
/* x is initialized only once across four calls of func() and
the variable will get incremented four
times after these calls. The final value of x will be 4. */
x++;
printf("%d\n", x); // outputs the value of x
}
int main() { //int argc, char *argv[] inside the main is optional in the particular program
func(); // prints 1
func(); // prints 2
func(); // prints 3
func(); // prints 4
return 0;
}
答案 0 :(得分:5)
在看到更新的答案后,以下是Objective-C代码的修改:
func staticFunc() {
struct myStruct {
static var x = 0
}
myStruct.x++
println("Static Value of x: \(myStruct.x)");
}
致电是您班上的任何地方
staticFunc() //Static Value of x: 1
staticFunc() //Static Value of x: 2
staticFunc() //Static Value of x: 3
答案 1 :(得分:2)
将变量声明在文件的顶层(任何类之外),称为全局变量。
文件顶层的变量被懒惰地初始化!那么你 可以将变量的默认值设置为 读取文件,直到您的代码才会实际读取该文件 首先要求变量的值。
来自HERE的参考。
<强>更新强>
从您的C示例中,您可以通过这种方式快速实现相同的目标:
var x = 0 //this is global variable
func staticVar() {
x++
println(x)
}
staticVar()
x //1
staticVar()
x //2
staticVar()
x //3
用操场测试。
在C和Objective-C中,您可以定义静态常量和变量 与类型相关联的全局静态变量。但是,在Swift中, type属性是作为类型定义的一部分写入的 类型的外部花括号,每个类型属性都是显式的 范围限定为它支持的类型。
使用static关键字定义类型属性。对于计算类型 类类型的属性,您可以使用class关键字来代替 允许子类覆盖超类的实现。该 下面的示例显示了存储和计算类型的语法 属性:
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
}
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
class var overrideableComputedTypeProperty: Int {
// return an Int value here
}
}
注意
上面的计算类型属性示例是针对只读计算类型&gt;属性,但您也可以定义读写计算 使用与计算实例相同的语法键入属性 属性。