Lucas de Vil schrieb:
Erster Gedanke zu 1)
Wie soll denn das bitte etwas abstrakter aussehen?
C-Quellcode
- if( [instance isKindOfClass:[subclass2 class] || [instance isKindOfClass:[subclass4 class] || [instance isKindOfClass:[subclass9 class])
- {
- //do stuff every of this subclasses can do
- }
- if( [instance isKindOfClass:[subclass1 class] || [instance isKindOfClass:[subclass3 class] || [instance isKindOfClass:[subclass9 class])
- {
- //do stuff every of this subclasses can do
- }
Das ist ja neben hässlich auch noch total C++
Was für ein Biss vom Apfel, der am Baume der Erkenntnis hing. Allerdings ist diese schon etwas älter. Steht nämlich bereits in meinem ersten Beitrag:
Dass du das in C++ so fühlst, ist logisch, weil sich C++ auf Typen verlässt. Du würdest mutmaßlich auch in C++ nach dem Typen fragen und dann casten, was dannn auch in sich schlüssig wäre.
Dinger gibt's, einfach irre!
Lucas de Vil schrieb:
Amin Negm-Awad schrieb:
Wie bereits eingangs gesagt, ist es keine Lösung, im if nach der Methode zu fragen und dann im if-Zweig irgendwelche Annehmen über den Typen zu machen.
Wo zum Henker macht er bitte im if-Zweig irgendwelche Annahmen über den Typen? Die macht er ja wohl definitiv schon weit vor dem if-Zweig!
Es ist gleichgültig, wo er das definiert hat. Er macht eine if-Abfrage und wünscht dann, dass der Compiler innerhalb des if-Zweigs einen automatischen Downcast vornimmt. Der Compiler denkt gar nicht daran.
Dir ist aber schon prinzipiell klar, dass er einen Fehler hat, weil sein Wunsch von der Wirklichkeit abweicht? Sonst gäbe es diesen Thread ja nicht. Oder wie viele Threads kennst du, die nur mitteilen, dass der Compiler genau das macht, was man erwartet?
Lucas de Vil schrieb:
Amin Negm-Awad schrieb:
Übrigens bringt -start ganz gewiss keine Fehlermeldung, da diese keine Parameter nimmt. Und deshalb stört sich der Compiler auch nicht daran.
Soweit ich mich erinnere gibt es gern mal Probleme, wenn der Compiler gleiche Methoden mit unterschiedlicher Signatur bekommt.
Also Dinge wie -(void)start, -(void)start: (id)something, -(void)start: (id)something: (id)different: (id)also
Hab jetzt keine Zeit im Forum zu suchern, erinnere mich aber, dass dazu was geschrieben stand.
Musst du gar nicht lange suchen, steht nämlich in dem Beitrag, den du gerade unvollständig zitierst:
Es muss mindestens -start: sein oder einen Rückgabewert haben. (Intern ist das dasselbe.)
Du warst nur so schlau, dass zu löschen.
Lucas de Vil schrieb:
Amin Negm-Awad schrieb:
Woher weißt du, ob die in einer Sammlung stecken?
Ich gehe davon aus. Steht doch da.
Coole Sache: Du konstruierst also eine Szenerie, nur um deiner Wahrheit nahe zu kommen, oder wie hast du das gleich formuliert?
Aber mal ehrlich: Die Lösung eines Downcasting-Problems dürfte nur außerordentlich geringen logischen Bezug zu Collections haben, oder?
Lucas de Vil schrieb:
Amin Negm-Awad schrieb:
Ah, deshalb antwrte ich dir auch gleich mit Schwachsinn.
Genialität und Wahnsinn liegen dicht beieinander. Mit Weisheit und Schwachsinn dürfte es ähnlich sein.
Zuweilen liegen sie ganz weit auseinander.
Lucas de Vil schrieb:
Nun gut, offenbar versuchen wir, dasselbe mitzuteilen.
Deshalb fasse ich noch einmal in einem eigenen Post zusammen.
Nein. Du hast es nur mittlerweile eingesehen.
Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
									25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?

 Und war auch eine völlig korrekte Aussage. Wobei ich aber in meiner ursprünglichen Überlegung eigentlich darauf hinauswollte, dass man soetwas in C++ zwar machen kann, aber in der Regel nicht machen sollte (und üblicherweise auch nicht macht). Also wiegesagt, besseres Klassendesign oder Visitor-Pattern oder sonstwas anderes. Daher meine Skepsis gegenüber einem ähnlichen bzw. vergleichbaren Vorgehen in Obj-C. Also: If-else-Prüfung. egal ob jetzt auf Typ oder "Kompetenz", kommen mir komisch vor.
 Und war auch eine völlig korrekte Aussage. Wobei ich aber in meiner ursprünglichen Überlegung eigentlich darauf hinauswollte, dass man soetwas in C++ zwar machen kann, aber in der Regel nicht machen sollte (und üblicherweise auch nicht macht). Also wiegesagt, besseres Klassendesign oder Visitor-Pattern oder sonstwas anderes. Daher meine Skepsis gegenüber einem ähnlichen bzw. vergleichbaren Vorgehen in Obj-C. Also: If-else-Prüfung. egal ob jetzt auf Typ oder "Kompetenz", kommen mir komisch vor.									 
 
 
									 
									