swift oop methods

Agregue una extensión/método a todos los objetos en Swift



oop methods (1)

No. Has respondido bastante a tu propia pregunta: los objetos Swift no tienen una clase base, y la única forma real de NSObject es heredar de NSObject .

En Objective-C, todos los objetos pueden tratarse como id de tipo, y casi todos los objetos heredan de NSObject. (Los bloques no, pero esa es la única excepción).

Por lo tanto, es posible crear una categoría Objective-C que amplíe TODOS los objetos Objective-C. (ignorando bloques)

En Objective-C, creé una extensión para NSObject que usa objetos asociados para adjuntar opcionalmente un diccionario a cualquier NSObject. Eso me permitió implementar los métodos setAssocValue:forKey: y assocValueForKey: eso hace posible adjuntar un par de clave / valor a cualquier NSObject. Esto es útil en muchas circunstancias.

Permite agregar propiedades almacenadas a una categoría, por ejemplo. Simplemente escribe un getter / setter que usa los métodos de valor asociados para adjuntar un objeto almacenado, y listo.

También permite adjuntar valores a objetos del sistema existentes en tiempo de ejecución. Puede colgar datos o bloques de código en botones, o hacer lo que necesite hacer.

Me gustaría hacer lo mismo en Swift.

Sin embargo, Swift no tiene una clase base común para todos los objetos como Objective-C. AnyObject y Any son protcols.

Así,

extension AnyObject

No compilará

No sé dónde "adjuntar" mis setAssocValue:forKey: y assocValueForKey: en Swift.

Podría crear una clase base para mi extensión, pero eso frustra el uso de una extensión. Podría hacer que mi objeto base sea un NSObject de Objective-C, pero eso significa que todos mis objetos deben ser NSObjects, y los objetos Swift no son NSObjects de forma predeterminada.

(Por cierto, esta pregunta se aplica tanto a las plataformas Mac OS como iOS)