2014-09-06 36 views
3

我在函数中定义了一个结构,无论我调用函数多少次,结构定义看起来总是第一次调用函数。函数中定义的结构

代码:

var g = 0 
    func f() { 
     struct InnerStruct{ 
      static var attr:Int = g 
     } 
     println("static attr value is \(InnerStruct.attr), g is \(g)") 
    } 

    f() 
    g++ 
    f() 
    g++ 
    f() 

结果是:

static attr value is 0, g is 0 
    static attr value is 0, g is 1 
    static attr value is 0, g is 2 
    Program ended with exit code: 0 

我不熟悉的迅速,任何机构可以解释,为什么?

回答

6

该代码片段说明了static属性在Swift中的初始化方式。它显示static属性在第一次调用时仅初始化一次。后续调用不会“重新分配”该值:可以看到递增gattr的值没有影响,该值保持不变。

+0

THX,我觉得我得到了答案。 – 6174 2014-09-06 12:09:08

0

简单地使用该结构的情况下,你会得到期望的结果

var g = 0 

func f() { 
    struct InnerStruct{ 
     var attr:Int = g 
    } 
    println("static attr value is \(InnerStruct().attr), g is \(g)") 
} 

f() 
g++ 
f() 
g++ 
f() 

结果:

static attr value is 0, g is 0 
static attr value is 1, g is 1 
static attr value is 2, g is 2