2013-07-06 58 views
-3

可以說我創建了一些名爲Rectangle的類。我創建了一個可變數組(稱爲allRectangles),並添加四種不同的矩形的數組:獲取實例名稱作爲NSString

例如:

Rectangle *rect1 = [[Rectangle alloc] init]; 
[allRectangles addObject: rect1]; 

...重複RECT2,rect3和rect4

如果我通過迭代陣列使用 for (Rectangle *rect in allRectangles),我只是想輸出的每一個名字,我該怎麼辦呢?例如,如果我這樣做:

NSLog(@"%@", rect) 

它將打印類名稱和內存地址。我想要它打印rect1然後rect2等...請幫助?

+4

添加名稱變量Rectangle類? – juniperi

+1

編譯代碼後,原來的變量名稱會丟失。最好的辦法是按照juniperi的建議給你的Rectangle類一個'name'屬性。要麼是這樣,要麼將矩形存儲在字典中使用鍵來標識它們(儘管這種方法失去了對象的順序,但可以使用商店的組合)。 – dreamlax

回答

4

在您的代碼段中的對象沒有名字,至少不至於你已經證明。也就是說,Rectangle類似乎並不具有name財產或類似的東西。

我懷疑你混淆的變量名稱(例如rect1)與對象的名稱。它們不是同一件事。 rect1是一個指針變量,它指向一個對象(Rectangle類的一個實例),但實際上並不影響的對象。一個對象可能會在其生命週期中被許多不同的變量指向,但這並不意味着這些變量中的任何一個的名稱都是該對象的名稱。 (請注意,在你的for-in循環中,每個對象都是由變量rect指向的。你是否期望這個事實導致對象被命名爲「rect」?)

如果你想要一個對象有一個名字像「rect1」,那麼你需要添加一個name屬性到類中,並在你創建的每個對象上設置該屬性。

0

爲什麼不將元素存儲在NSDictionary而不是NSArray中,並通過變量的名稱檢索它們?

NSMutableDictionary *dict = [NSMutableDictionary new] ; 

Rectangle *rect1 = [[Rectangle alloc] init]; 
[dict setObject:rect1 forKey:@"rect1"]; 


for (NSString *key in [dict allKeys]) { 
    NSLog(@"%@ => %@", key, [dict objectForKey:key]); 
} 
0

局部變量名是源代碼的信息,它不會在你運行的代碼存在,它甚至使多大意義是什麼在以下

Rectangle * rect1 = [[Rectangle alloc] init]; 
Rectangle * rect2 = rect1; 

Rect1的的「矩形名稱」或rect2

如果你想讓你的矩形有一個名字,你必須給它們一個名稱屬性,並在創建每個矩形時進行設置。