2016-07-28 3 views
0

См. Ниже. Я понимаю, что замыкание переменной может быть вызвано внутри любого объекта, поэтому само не может быть определено в контексте этого замыкания.Использование self in instance замыкающих переменных

Но можно ли определить someFn, чтобы я мог использовать «я»?

class A { 
    var value:Int = 3 
    var someFn:emptyFn = { 
    // does not compile, self is not set 
    print (self) 
    } 
} 

A().someFn() 
+1

Уважаемый пользователь, который дал ниспровержение - в чем причина? –

ответ

2

Проблема заключается в том, что вы используете self до инициализации экземпляра A.

Так что нет self.

Если вы перемещаете создание Ф.О. вашего закрытия внутри init он будет работать

class A { 
    var value:Int = 3 
    var someFn :() ->() = { } 

    init() { 
     someFn = { print(self) } 
    } 
} 

A().someFn() // A 

мне нужно заполнить someFn с пустым значением во время декларации, с тем чтобы иметь возможность использовать self внутри init. Infact self не может использоваться (внутри init), прежде чем все свойства без значения по умолчанию будут инициализированы.

+1

спасибо! это делает так много смысла –

+1

@mingyeow: Добро пожаловать :) –

+0

любая идея, почему я, возможно, получил downvote btw? :/ –