UILongPressGestureRecognizer
вызывается несколько раз с разными состояниями. В вашем случае вы должны представить контроллер вида, когда начинается жест. Измените easterEggScreenPresent
на следующее:
@objc func easterEggScreenPresent(sender: UILongPressGestureRecognizer) {
guard sender.state == .began else { return }
let egg = EasterEggViewController()
((UIApplication.shared.keyWindow?.rootViewController as? MainTabBarViewController)?.selectedViewController as? NavigationPodesavanjaViewController)?.visibleViewController?.present(egg, animated: true, completion: nil)
}
JavaScript традиционно не обеспечил механизм для свойства, скрывающего ('членов парламента, не занимающих официального поста').
, Поскольку JavaScript лексически ограничен по объему, Вы могли всегда моделировать это на на уровень объектов при помощи функции конструктора как закрытие по Вашим 'членам парламента, не занимающим официального поста' и определение Ваших методов в конструкторе, но это не будет работать на методы, определенные в опытном свойстве конструктора.
, Конечно, существуют способы работать вокруг этого, но я не рекомендовал бы это:
Foo = (function() {
var store = {}, guid = 0;
function Foo() {
this.__guid = ++guid;
store[guid] = { bar : 'baz' };
}
Foo.prototype.getBar = function() {
var privates = store[this.__guid];
return privates.bar;
};
Foo.prototype.destroy = function() {
delete store[this.__guid];
};
return Foo;
})();
Это сохранит 'частные' свойства в другом объекте, отдельном от Вашего Foo
экземпляр. Удостоверьтесь, что звонили destroy()
после того, как Вы будете сделаны wih объект: иначе Вы только что создали утечку памяти.
редактирование 01.12.2015: ECMAScript6 делает улучшенные варианты, которые не требуют ручного объектного возможного разрушения, например, при помощи WeakMap или предпочтительно Символ , избегая потребности во внешнем хранилище в целом:
var Foo = (function() {
var bar = Symbol('bar');
function Foo() {
this[bar] = 'baz';
}
Foo.prototype.getBar = function() {
return this[bar];
};
return Foo;
})();
Методы на прототипе не могут получить доступ к "частным" участникам, поскольку они существуют в JavaScript; Вам нужно некоторое привилегированное средство доступа. Так как Вы объявляете get
, где это может лексически видеть b
, это будет всегда возвращать то, чем b
был после создания.