Ja czasem lubię organizować elementy IB w NSArray
s przede wszystkim, aby pomóc mi uporządkować moje elementy. Najczęściej różne klasy obiektów tworzą z nim tę samą tablicę. Chociaż jest wygodnym sposobem organizacji, nie może wydawać się owinąć głowę wokół dlaczego jeśli mam tablicę takich jak to:dla pętli - typ obiektu nie jest brany pod uwagę?
NSArray *array = [NSArray arrayWithObjects:((UITextField *)textField), ((UISegmentedController *)segmentedController), nil];
Dlaczego otrzymuję „nie reaguje na przełącznik” wiadomości, kiedy umieścić for
pętlę tak:
for (UITextField *text in array) {
[text setText:@""];
}
pętla for
wydaje się być przekazane obiekty, które nie są z klasy UITextField
.
Jaki jest cel deklarowania klasy obiektu, jeśli wszystkie obiekty w określonej macierzy są przekazywane przez pętlę?
EDIT Tylko dla odniesienia, to jak mam posługiwaniu się nim już teraz:
for (id *object in array) {
if ([object isMemberOfClass:[UITextField class]]) {
foo();
} else if ([object isMemberOfClass:[UISegmentedController class]) {
bar();
}
}
'id' jest już typem wskaźnika. 99,9% czasu, chcesz użyć zwykłego typu "id", a nie wskaźnika do jednego "id *". –