Gibt es ein Objective-C-Äquivalent von C++ 's dynamic_cast?Objective-C dynamic_cast?
kann es sein, diese gefälscht werden:
MyClass *safeObject = [object isKindOfClass: [MyClass class]]
? (MyClass *)originalObject : nil;
Aber das ist eine Menge Code zu schreiben, auch wenn ich es nicht geben oft müssen.
Ich bin ein bisschen rostig so nicht ganz richtig sein könnte, aber ich glaube, das äquivalent in C++ wäre:
MyClass safeObject = dynamic_cast<MyClass>(orginalObject);
Der Kontext ist es, einen Block, in dem der Parameter als eine Art a definiert ist generische Klasse, aber in diesem Block "weiß" ich, dass es eine spezifische Unterklasse ist. Trotzdem möchte ich nicht einfach blindlings mit (MyClass *)originalObject
werben und einen theoretisch möglichen Fehler ignorieren.
Um klar zu sein, während ich eine dynamic_cast
lieben würde, würde ich mit einer alternativen Annäherung glücklich sein, diesen Fall ebenso sicher zu behandeln.
Im schlimmsten Fall könnten Sie dafür ein Makro schreiben. – JustSid
Objective-C ist duck-typed. Ganz ehrlich, "komplizierte" Casts rudern irgendwie gegen die Sprache. – zneak
Ja, ich denke ich habe hier wahrscheinlich die falsche Frage gestellt. Was auch immer für eine Frage, die ich * hätte haben sollen, hatte eine Antwort von "nimm einfach NSAsssert ([object isKindOfClass: [MyClass-Klasse]], @" blahblah ")' weil du es sowieso nicht erwartest. " :) –