2014-09-06 3 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 инициализируются только один раз при первом вызове. Последующие вызовы не «переназначают» значение: вы можете видеть, что приращение g не влияет на значение attr, которое остается неизменным.

+0

Thx, я думаю, что я получаю ответ. – 6174

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 
Смежные вопросы