Czy istnieje sposób na rzucanie obiektów w Objective-C, podobnie jak w przypadku rzutowania obiektów w VB.NET?
Na przykład próbuję wykonać następujące czynności:
// create the view controller for the selected item
FieldEditViewController *myEditController;
switch (selectedItemTypeID) {
case 3:
myEditController = [[SelectionListViewController alloc] init];
myEditController.list = listOfItems;
break;
case 4:
// set myEditController to a diff view controller
break;
}
// load the view
[self.navigationController pushViewController:myEditController animated:YES];
[myEditController release];
Jednak otrzymuję błąd kompilatora, ponieważ właściwość „list” istnieje w klasie SelectionListViewController, ale nie w FieldEditViewController, mimo że SelectionListViewController dziedziczy z FieldEditViewController.
Ma to sens, ale czy istnieje sposób na rzutowanie myEditController na SelectionListViewController, aby uzyskać dostęp do właściwości „list”?
Na przykład w VB.NET zrobiłbym:
CType(myEditController, SelectionListViewController).list = listOfItems
Dzięki za pomoc!
objective-c
Pałka policjanta
źródło
źródło
Więcej przykładów:
źródło
Typowanie w Objective-C jest łatwe, ponieważ:
Co się jednak stanie, jeśli pierwszy obiekt nie jest
UIView
i spróbujesz go użyć:To się rozbije. I łatwo jest znaleźć taką awarię dla tego przypadku, ale co, jeśli te linie należą do różnych klas, a trzecia linia jest wykonywana tylko raz na 100 przypadków. Założę się, że to Twoi klienci to katastrofa, a nie Ty! Prawdopodobnym rozwiązaniem jest wczesna awaria , na przykład:
Te stwierdzenia nie wyglądają zbyt ładnie, więc moglibyśmy je ulepszyć dzięki tej przydatnej kategorii:
To jest o wiele lepsze:
PS W przypadku kolekcji bezpieczeństwa typu Xcode 7 ma znacznie lepsze wyniki niż rzutowanie typów - generics
źródło
Jasne, składnia jest dokładnie taka sama jak C -
NewObj* pNew = (NewObj*)oldObj;
W tej sytuacji możesz rozważyć dostarczenie tej listy jako parametru do konstruktora, na przykład:
Następnie użyj tego w ten sposób:
źródło
Rzutowanie na włączenie jest tak samo ważne jak rzutowanie na wykluczenie dla programisty C ++. Rzutowanie typów nie jest tym samym, co w przypadku RTTI w tym sensie, że można rzutować obiekt na dowolny typ, a wynikowy wskaźnik nie będzie zerowy.
źródło