12
votes

Les traits / mixes de soutien de l'objectif-C?

Y a-t-il des techniques d'émulation de traits ou de mixines dans l'objectif-c?

dans Scala, par exemple, je peux faire quelque chose comme ceci: xxx

c'est fondamentalement Un moyen de combiner (ou de mélanger) plusieurs morceaux de fonctionnalité en une seule classe. Donc, à l'heure actuelle, j'ai une sorte d'UIViewController tout à fait que tous mes contrôleurs sous-classent de la sous-classe, mais ce serait NATATAIRE si je pouvais le casser et avoir des contrôleurs spécifiques hériter d'un comportement spécifique.


2 commentaires

Soin pour expliquer ce que sont les traits et les mixines? Les concepts peuvent être pris en charge, mais connus par un nom différent.


On dirait que quelqu'un a implémenté des traits Obj-C ici: Etoileos.com// News / Archives / 2011/07/12 / 1427


3 Réponses :


-4
votes

Vous recherchez probablement des catégories. Voir http://macdevelopertaps.com/Objective-c/Objective-c-categories. HTML .


3 commentaires

Malheureusement, je ne le pense pas. J'ai considéré cela et je pense que s'il y a une façon de le faire, cela impliquera des catégories. Mais les catégories vous permettent de mélanger des méthodes dans une classe spécifique et non de plusieurs classes (non?), Donc je ne pense pas qu'ils sont suffisants. Mais je pourrais avoir tort.


Les catégories sont bien définies sur une seule classe. Cependant, d'autres classes héritantes de cette classe héritent également des catégories.


Les catégories ne sont certainement pas des traits dans le sens Scala. Ils sont plus comme des classes partielles dans la terre C #.



18
votes

Il n'y a pas d'aide linguistique directe, mais vous pourriez accomplir quelque chose de similaire avec le transfert de message. Disons que vous avez des cours de trait "foo" et "bar", qui définissent des méthodes " -dofoo code>" et " -dobar code>", respectivement. Vous pouvez définir votre classe à avoir des traits, comme celui-ci:

[widget doFoo];
[widget doBar];


1 commentaires

Génial! Lorsque vous avez vu la question, vous ne saviez pas quels traits étaient et vous vous cherchez et même mis en œuvre cela !!! Je voulais savoir une chose, pourquoi est-ce que MOtHODInSeignatureForSelector doit être remplacé. n'est-ce pas assez transfecté? Quand est-ce que méthoodignatureForSelector est appelé? Quel est le flux?



0
votes

Les traits ou mixines ne sont pas pris en charge par Objective-C, vous n'avez que l'option intégrée de catégories. Mais heureusement, l'exécution Objective-C a presque tous les outils de mise en œuvre de sa propre idée en cas de mélange ou de traits d'ajout de méthodes et de propriétés à votre classe au moment de l'exécution. Vous pouvez en savoir plus sur les opportunités que l'exécution de l'objectif-C fournit à vous sur le site Web de la documentation d'Apple Objective-C Runtime Docs

L'idée est la suivante:

1) Vous pouvez créer un protocole de l'objectif-C (mixin), dans lequel vous allez déclarer des propriétés et des méthodes.

2) Ensuite, vous créez une classe (implémentation de mixin), qui mettra en œuvre des méthodes de ce protocole.

3) Vous faites votre classe, dans laquelle vous souhaitez fournir la possibilité de composition avec des mélanges, afin de se conformer à ce protocole (mixin).

4) Lorsque votre application est lancée, vous ajoutez avec l'exécution de l'objectif-C Toutes les implémentations de la classe et des propriétés de la mise en œuvre du mixage déclaré dans (mixin) dans votre classe.

5) voilà :)

ou vous pouvez utiliser des projets open source prêts tels que " alchemiq "


0 commentaires