1. Swift / Говнокод #26534

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    import Foundation
    
    @objc protocol SomethingDoable {
        func doSomething()
    }
    
    class Inner: SomethingDoable {
        @objc func doSomething() {
            print("Inner!")
        }
    }
    
    @objc class Outer: NSObject {
    
        let inner: SomethingDoable = Inner()
    
        override func forwardingTarget(for aSelector: Selector!) -> Any? {
            return inner
        }
    }
    
    let outer = Outer()
    outer.perform(#selector(SomethingDoable.doSomething))

    Удачного дебага!

    Запостил: Desktop, 27 Марта 2020

    Комментарии (52) RSS

    • #seo

      Надеюсь, страйкер каждый раз перед тем, как посрать, семь раз вводит проверочный код.
      Ответить
      • да, во времена рекаптчи это смешно. Такой привет из 2008-го года
        Ответить
        • Дык ГК как раз тогда и делался, всё правильно.
          Ответить
    • Можно ещё круче сделать:

      @objc protocol SomethingDoable {
          init()
          func doSomething()
      }
      
      class Inner: SomethingDoable {
          required init() { }
          
          @objc func doSomething() {
              print("Inner!")
          }
      }
      
      class Outer<T>: NSObject where T: SomethingDoable {
      
          let inner: T = T.init()
      
          override func forwardingTarget(for aSelector: Selector!) -> Any? {
              return inner
          }
      }
      
      let outer = Outer<Inner>()
      Ответить
      • Не нужно лишних слов. Логика должна быть очень простая: проникнуть в заражаемый организм, адсорбироваться на клетках альвеол, проникнуть за клеточную стенку и использовать клеточные структуры как матрицу для своих копий.

        Вот и все.!
        а у Вас тут какие-то 'class Outer<T>: NSObject where T: SomethingDoable {'..

        так не годится.
        Ответить
      • я не понимаю, что ты пытаешся сделать
        делегирование* из аутера в иннер? ну так это красиво конечно (джавоебы и шарпеи сосут), но унас в котлине это есть

        "делегирование" это не то, о чем ты подумал: это не делегаты из cocoa, а передача всех вызовов другому объекту
        Ответить
        • Пересылка сообщения с compile-time check. Если делать без дополнительного протокола, а пытаться вызвать селектор несуществующего метода у класса, то сделать это можно только через строковый литерал, что некрасиво. А вот так компилятор доволен.

          Но это бомба отложенного действия, как впрочем почти любое использование рантайма. Ты вызываешь селектор протокола у класса, который про этот протокол ни сном ни духом. И это говно работает.
          Ответить
          • То-сть цимес в конструкции "#selector(SomethingDoable.doSomething)" , которую проверяет компилятор. Так понятно, да:)

            ``forwardingTarget`` очень сильное колдуство конечно, довольно неожиданное для статически типизированных языков. Яблочные языки в этом вопросе скорее исключение
            Ответить
    • Юмор в том, что кроме Десктопа тут никто не умеет в стрижа.
      Все глядят как бараны на новые ворота, и не могут ничего вразумительного сказать.
      Ответить
      • А «PHP» знают все.
        Ответить
        • Кроме меня
          Ответить
          • Не пизди.
            Ответить
            • Ну что за манеры?
              Даже если ты уверен, что я знаю PHP, то зачем же говорить об этом прилюдно? Мало-ли у кого какие грехи юности были
              Ответить
              • Пхпблядь
                Ответить
                • ну не то, чтоб блядь, но в 2002-2003м году действительно сайты было принято делать на пхп
                  Ответить
                  • сайты было приятно делать на пхп
                    Ответить
                  • Кто даёт продукт вторичный,
                    Тот питается отлично.

                    Это про PHP
                    Ответить
                    • Потребности в отсутствии XSS временно отсутсутствуют
                      Ответить
                  • А не на «Перле»?
                    Ответить
                    • И на перле еще тоже, но уже начиналась говоноэпоха пхп.
                      Вот в 2000-м еще был перл конечно, а в 2003-м скорее уже пхп
                      Ответить
                    • Ты ведь тарелку никогда не устанавливал?
                      Ответить
              • Как будто знать PHP - незаконно.
                Какая-то питушня уровня экстрасенсорики, предрассудков и примет.
                Ответить
                • Как будто что-то зазорное.
                  Ответить
                • > знание PHP

                  Раньше за такое на костре сжигали.
                  Ответить
                  • Именно поэтому я за «PHP».
                    Ответить
                  • Знаем мы ваших докторов PHP с птичьими носами.
                    Ответить
                  • Какой бельфегор )))
                    Ответить
                    • Бельфегор хорошо осведомлён в технологических вопросах и техническом прогрессе, который он поддерживает. В распределении семи смертных грехов ему досталась лень. Бельфегор может принимать облик молодой привлекательной котодевки женщины, поэтому иногда его считают демоницей женского пола.

                      Какой Бельфегор )))
                      Ответить
                      • Искал изображения женщин женского пола в поисковике по слову "Бельфегор", нашёл вот это:

                        https://ic.pics.livejournal.com/alivano/37821658/71704/original.jpg
                        Ответить
                        • Скоро воспоминаниями о роде человеческом останутся лишь изображения. Жаль, смотреть будет некому.
                          Ответить
                        • >Искал изображения женщин женского пола

                          женщины женского пола куда лучше женщин пола мужского
                          Ответить
                          • > женщин пола мужского

                            Трапы что ли?
                            Ответить
                          • https://i2.wp.com/pulpitandpen.org/wp-content/uploads/2019/08/Screen-Shot-2019-08-14-at-8.50.28-AM.png?fit=1004%2C1024&ssl=1
                            Ответить
                            • Ко-ко-кой пиздец )))
                              Ответить
                              • Странно. В список моих симптомов не входит кукареканье.
                                Ответить
                            • > because of hatred

                              ну да, всё дело в том, что мы ненавидим всё на свете
                              Ответить
                            • >date trans women

                              "дорогой", -- сказала она, -- "у тебя такой большой. У меня, правда, больше был.."

                              Я про кадык..
                              Ответить
                              • Лол, разговор двуз пидовок описывает третья.

                                (а четветрая комментирует это, а пятая прочтёт коммент и мю оставить свой)
                                Ответить
                            • > hatred

                              Да ладно, просто боятся что мужики на работе не оценят. Вот и всё.
                              Ответить
                      • Лучший Бельфегор — в мегатен.
                        https://megamitensei.fandom.com/wiki/Belphegor
                        Ответить
                      • на горшке сидит
                        https://upload.wikimedia.org/wikipedia/commons/7/74/Belphegor.jpg

                        трудно назвать его привлекательной женщиной
                        Ответить
        • Я когда-то (лет 10 назад) знал немного, но забыл.
          Ответить
          • Ничего. Вспомнишь во время агонии, жаль, воспользоваться не успеешь.
            Ответить
    • А если серьезно, то я не понял, в чем прикол
      Кажется что напечает "Inner", пушо Outer не реализует SomethingDoable , а все нереализуемое он делегирует иннеру

      Дексктоп?
      Ответить
      • forwardingTarget должен вернуть наследника NSObjectProrocol
        кстати, оно действительно напечатает "Inner", но упадет потом
        Ответить
        • я думал, любой объект наследует NSObjectProrocol

          а как упадет? thread_bad_exec, в кору?
          Ответить
          • EXC_BAD_ACCESS
            в Swift классы неявно реализую протокол AnyObject и все, если нужна реализация NSObjectProrocol, то наследуем класс от NSObject явно
            Ответить
        • Оно упадёт только в песочнице и связано это, как я понимаю, с витками ранлупа. В нормальном проекте всё будет работать и не бибикать.

          В документации[1] никакого упоминания, что "forwardingTarget должен вернуть наследника NSObjectProrocol", нет.

          [1] https://developer.apple.com/documentation/objectivec/nsobject/1418855-forwardingtarget
          Ответить
    • Дестоп, видал
      https://twitter.com/PSchmiedmayer/status/1265689512199495684?s=20
      ?
      Ответить
      • Не видел.

        Нахуй не нужно. Они с существующими бэкендами на Свифте не знают, что делать, а тут какой-то студак написал диплом при помощи сырой технологии и решил поделиться этим счастьем с миром.
        Ответить

    Добавить комментарий