我有一個NSMutableArray'myArray',其中包含一些customObject'A',現在我想將'myArray'轉換爲tempArray,其中包含一些名爲'B'的子類'A'的對象。 作爲就像如下屬性:NSArray上的轉換問題
NSMutableArray <B *> tempArray;
tempArray = [myArray mutableCopy];
但tempArray對象始終是一種「A」的。我想將'A'轉換爲'B',任何建議?
我有一個NSMutableArray'myArray',其中包含一些customObject'A',現在我想將'myArray'轉換爲tempArray,其中包含一些名爲'B'的子類'A'的對象。 作爲就像如下屬性:NSArray上的轉換問題
NSMutableArray <B *> tempArray;
tempArray = [myArray mutableCopy];
但tempArray對象始終是一種「A」的。我想將'A'轉換爲'B',任何建議?
'B'有更多的屬性,我想要使用。
您對此有何看法? B
是A
的孩子,它包含更多信息(您希望使用的財產等)。該財產的數據從哪裏來?
您需要一種方法來構造使用(的性質)的A
一個實例,並提供額外的數據B
需求B
一個新的實例。 B
可能已經有合適的init
方法,或者您可能需要編寫自己的代碼。
一旦你有辦法產生一個新的B
你可以遍歷您的陣列建立一個新的,建立一個新的B
實例每個A
實例。
HTH
如果有一個不變的陣列(NSArray的),這意味着你不能添加或刪除對象,或取代與其他對象的對象。 [myArray mutableCopy]創建一個NSMutableArray。它將包含完全與不可變數組相同的對象,但您現在可以自由添加或刪除或替換對象。
您的聲明NSMutableArray * tempArray沒有做任何事情,只是對編譯器說謊。如果myArray包含A *類型的對象,則tempArray包含A *類型的相同對象。你只是說謊,所以編譯器認爲他們是B *類型的對象,但他們不是。
編譯器無法自動將某個類的對象轉換爲子類的對象。例如,如果子類有其他成員,編譯器將如何填充這些成員?這是行不通的。
如果你想創建一個基於類型A *的對象B型*的新對象,你必須這樣做手工,有可能使用的初始化器像
- (instancetype)initWithA:(A*)a;
在接口B
。你的代碼可以是例如
NSMutableArray <B*> *tempArray = [myArray mutableCopy];
for (NSUInteger i = 0; i < tempArray.count; ++i) {
tempArray [i] = [[B alloc] initWithA:tempArray [i]];
}
或可能
NSMutableArray <B*> *tempArray = [[NSMutableArray alloc] init];
for (A* a in myArray)
[tempArray addObject:[[B alloc] initWithA:a]];
你能證明你試過代碼 –
,如果你會做tempArray = myArray的是永遠是A類沒有B型,什麼是目的做到這一點 –
請詳細說明。你想把一個對象上傳到它的子類B? –