Можно ли в Swift использовать псевдоним для self? - PullRequest
0 голосов
/ 06 мая 2020

Swift, похоже, разделяет с python одну характеристику c требования class ссылки на экземпляр для доступа к членам - даже внутри самого класса. По умолчанию для обоих языков установлено self. В частности,

 self.someClassMethod()

Это идентично между python и swift. Мне также не нравится, что это требование навязчиво: оно привлекает мое внимание к self и к тому, какой метод действительно вызывается. В python я уменьшаю (хотя не удаляю ) раздражение, используя вместо него s:

 def someInstanceMethod(s, param1, param2)

вместо стандартного

 def someInstanceMethod(self, param1, param2)

Затем внутри метода я могу получить доступ к другим методам экземпляра:

   s.someOtherInstanceMethod()

Я не собираюсь сражаться по этому поводу: PEP люди будут прыгать из-за этого - но для меня это более читается и другие в моей команде. Есть ли такой способ сделать ярлык в swift? Заметил typealias и пробовал использовать:

 fileprivate let tp = U.tprint  // Any non-critical logging statements will happen with this

Но тогда надо сделать так:

  self.tp("Loaded synthesizer settings")

Без ссылки на self возникает следующая ошибка:

(162, 25) reference to property 'tp' in closure requires explicit 'self.' to make capture semantics explicit

Я бы предпочел только

  tp("Loaded synthesizer settings")

, но это, очевидно, невозможно. Можем ли мы получить ближе к этому - по строкам s.<method> вместо self.<method>?

1 Ответ

1 голос
/ 06 мая 2020

Немного неясно, в чем заключается вопрос или что, по вашему мнению, является целью передачи self, поэтому вот краткое изложение ключевых фактов:

  • Есть члены экземпляра и члены типа (члены типа помечены static или class).

  • Если метод является методом экземпляра, для доступа не нужно произносить self члены экземпляра.

  • Если метод является методом типа, для доступа к членам типа не нужно говорить self.

  • Если метод является методом экземпляра, он может сказать Self для доступа к членам типа.

  • Если метод является методом типа, экземпляра нет, поэтому к членам экземпляра нельзя получить доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...