Wenn Sie eine unveränderliche Array (NSArray), die Sie bedeutet, können Objekte nicht hinzuzufügen oder zu entfernen oder Objekte mit anderen Objekten zu ersetzen. [myArray mutableCopy] erstellt ein NSMutableArray. Es enthält genau die gleichen Objekte wie das unveränderbare Array, aber Sie können nun Objekte hinzufügen, entfernen oder ersetzen.
Ihre Deklaration NSMutableArray * tempArray tut nichts als den Compiler zu belügen. Wenn myArray Objekte vom Typ A * enthielt, enthält tempArray dieselben Objekte vom Typ A *. Sie lügen nur, so der Compiler glaubt Sie sind Objekte des Typs B *, aber sie sind nicht.
Es gibt keinen Weg auf der Erde, wie ein Compiler ein Objekt einer Klasse automatisch in ein Objekt einer Unterklasse umwandeln könnte. Wenn die Unterklasse zum Beispiel zusätzliche Mitglieder hat, wie wird der Compiler diese Mitglieder füllen? Das kann einfach nicht funktionieren.
Wenn Sie neue Objekte vom Typ B * erstellt werden sollen, basierend auf Objekte vom Typ A *, müssen Sie von Hand tun, wahrscheinlich einen initialiser wie
- (instancetype)initWithA:(A*)a;
in Ihrer B-Schnittstelle. Der Code könnte zum Beispiel
NSMutableArray <B*> *tempArray = [myArray mutableCopy];
for (NSUInteger i = 0; i < tempArray.count; ++i) {
tempArray [i] = [[B alloc] initWithA:tempArray [i]];
}
oder möglicherweise
NSMutableArray <B*> *tempArray = [[NSMutableArray alloc] init];
for (A* a in myArray)
[tempArray addObject:[[B alloc] initWithA:a]];
können Sie zeigen Ihre versuchten Code –
wenn Sie tun TempArray = myArray ist wird es immer sein Typ A B nicht geben, und was ist Zweck Tun Sie dies –
Erarbeiten Sie es bitte mehr. Möchten Sie A-Objekte in ihre Unterklasse B umwandeln? –