O ile rozumiem, Objective C/iOS jest bardzo dynamicznym językiem, więc czy jest tak dynamiczny jak Ruby? Czy ma on odpowiednik metody method_missing? Zadałem to samo pytanie dla js Does Javascript have something like Ruby's method_missing feature? i byłem rozczarowany, że js jeszcze go nie obsługuje.Równoważnik Ruby method_missing w Objective C/iOS
Odpowiedz
Objective-C jest dynamiczna, chociaż będąc programistą Ruby, chciałbym powiedzieć, że nie jest tak dynamiczny jak Ruby.
Objective-C ma odpowiednik method_missing. Będziemy chcieli, aby zastąpić zarówno forwardInvocation:
i methodSignatureForSelector:
i wykonaj to ważne porady od Apple:
Ważne odpowiedzieć na metodach, że obiekt nie sama rozpoznać, trzeba zastąpić methodSignatureForSelector: oprócz forwardInvocation :. Mechanizm przekazywania wiadomości używa informacji uzyskanych z metodySignatureForSelector: do utworzenia obiektu NSInvocation do przekazania. Twoja nadpisująca metoda musi dostarczyć odpowiednią sygnaturę metody dla danego selektora, albo przez preformulację, albo przez zapytanie innego obiektu o jeden.
Nie używaj doesNotRecognizeSelector:
jak Apple ostrzega, że it must always result in an exception being thrown.
Proszę zapoznać się z dokumentacją klasy NSObject dalszych szczegółów: http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html
Domyślam się, że method_missing to metoda wywołania zwrotnego, która jest wywoływana, gdy obiektowi brakuje pewnej metody. Cóż, możesz użyć metody respondsToSelector, aby sprawdzić, czy obiekt może odpowiedzieć na metodę. Jest to metoda zadeklarowana w protokole NSObject. Zamiast wywoływania metody method_missing po stwierdzeniu, że brakuje jakiejś metody, można ją sprawdzić wcześniej.
if ([myObject respondsToSelector:@selector(someMethodThatMightBeMissing:)])
NSLog(@"The method is missing");
'responsesToSelector:' w Objective-C odpowiada 'response_to?' W Ruby, a nie 'method_missing'. – louielouie
Pozdrawiam, wydaje się prostsze niż louielouie, jaka jest różnica, ponieważ nie jestem w stanie ocenić jako początkujący dzięki :) – user310291
Ten, który zasugerowałem pomaga w sprawdzeniu, czy obiekt może reagować na metodę. Najczęściej będziesz chciał użyć tej metody, gdy podejrzewasz, że obiekt może nie reagować na metodę, jest to pewien środek ostrożności. Jeśli obiekt lub jego poprzednik (y) nie mają takiej metody, twój program ulegnie awarii. Ale wywołanie metody tylko z warunkiem, że obiekt zareaguje na nią, zapobiegnie awariom programu. Metoda method_missing, o ile rozumiem, to metoda, która jest wywoływana, gdy taka sytuacja ma miejsce i nie pozwala na awarię twojego programu. Tak więc ten pierwszy jest przeznaczony do chekingowania, a drugi do obsługi przypadku. –
I zostały wdrożone ten wzór na przykładzie dodawania tych samych metod do podklasy UITextField
i UITextView
: https://stackoverflow.com/a/19661059/171933
Ciesz się!
- 1. Pythona równoważnik Perl/Ruby || =
- 2. Równoważnik Ruby funkcji PHP ucfirst()
- 3. Równoważnik NSMutableArray w C++?
- 4. Czy Ruby ma odpowiednik method_missing dla niezdefiniowanych zmiennych instancji?
- 5. Ruby || = równowartość w Objective-C
- 6. Kiedy używać `method_missing`
- 7. Czy istnieją odpowiedniki dla metody Ruby's method_missing w innych językach?
- 8. jak wykryć cios z mikrofonu nie głos w iphone?
- 9. Równoważnik DataTable w Javie
- 10. Równoważnik include() w HTML
- 11. Równoważnik "rzutu" w R
- 12. Równoważnik setdefault w Go?
- 13. Równoważnik dekodowania w postgresie
- 14. Równoważnik j w NumPy
- 15. Równoważnik rubla Perla Data :: Dumper
- 16. Równoważnik "exec" w emacs * eshell *?
- 17. Równoważnik `__FILE__`,` __LINE__` w bashu
- 18. Równoważnik parse_url w grails/groovy?
- 19. Równoważnik UIApplication.shared.preferredContentSizeCategory w rozszerzeniu aplikacji
- 20. Równoważnik C# ObservableCollection w Javie
- 21. Równoważnik String.Format (.NET) w Javie?
- 22. Równoważnik FileSystemWatcher (.NET) w kakao
- 23. Równoważnik usleep() w jądrze CUDA?
- 24. Równoważnik obiecywania w języku C#
- 25. BDD w Objective-C
- 26. Równoważnik Java dla .charCodeAt()
- 27. Równoważnik WPF właściwości AccesibleName
- 28. Równoważnik pętli zagnieżdżonej
- 29. Równoważnik gettimeday() dla Windows
- 30. Równoważnik "tego" wskaźnika
+1 za doskonałą odpowiedź! – Vignesh
Zobacz także sekcję [Przesyłanie wiadomości] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html#//apple_ref/doc/uid/TP40008048- CH105) w Przewodniku po bieżącym środowisku Objective-C. –