Existe-t-il un moyen de convertir des objets dans objective-c de la même manière que les objets sont castés dans VB.NET?
Par exemple, j'essaye de faire ce qui suit:
// 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];
Cependant, j'obtiens une erreur de compilation car la propriété 'list' existe dans la classe SelectionListViewController mais pas sur FieldEditViewController même si SelectionListViewController hérite de FieldEditViewController.
Cela a du sens, mais existe-t-il un moyen de convertir myEditController en SelectionListViewController afin que je puisse accéder à la propriété 'list'?
Par exemple dans VB.NET, je ferais:
CType(myEditController, SelectionListViewController).list = listOfItems
Merci pour l'aide!
objective-c
Gamelle
la source
la source
Plus d'exemples:
la source
Le typage en Objective-C est simple car:
Cependant, que se passe-t-il si le premier objet ne l'est pas
UIView
et que vous essayez de l'utiliser:Il va s'écraser. Et il est facile de trouver un tel plantage pour ce cas, mais que se passe-t-il si ces lignes sont dans des classes différentes et que la troisième ligne n'est exécutée qu'une seule fois dans 100 cas. Je parie que vos clients trouvent ce crash, pas vous! Une solution plausible est de planter tôt , comme ceci:
Ces affirmations ne sont pas très belles, nous pourrions donc les améliorer avec cette catégorie pratique:
C'est bien mieux:
PS Pour la sécurité des types de collections, Xcode 7 a un bien meilleur que le typage - Génériques
la source
Bien sûr, la syntaxe est exactement la même que C -
NewObj* pNew = (NewObj*)oldObj;
Dans cette situation, vous pouvez envisager de fournir cette liste en tant que paramètre au constructeur, quelque chose comme:
Ensuite, utilisez-le comme ceci:
la source
La conversion pour inclusion est tout aussi importante que la conversion pour exclusion pour un programmeur C ++. Le cast de type n'est pas le même qu'avec RTTI dans le sens où vous pouvez convertir un objet en n'importe quel type et le pointeur résultant ne sera pas nul.
la source