Ich habe eine Anforderung, wo ich einige readonly
Eigenschaften in einem Protokoll und übernehmen dieses Protokoll zu zwei Klassen (sagen A & B), da die Eigenschaften sind readonly
, ich rede sie in die .m Files
meiner beiden Klassen (A & B) kann ich einige wie vermeiden diese doppelte Deklaration aller Eigenschaften in beiden Klassen?Können wir @properties in einer gemeinsamen Datei
Antwort
Erstellen Sie eine Klasse und deklarieren Sie Ihre schreibgeschützten Eigenschaften in dieser Klasse. Erstellen Sie dann Ihre Klassen A und B, die von der Klasse erben.
So Ihre CommonClass.h
würde so aussehen
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface CommonClass : NSObject
@property (strong, readonly) <Type1> property1;
@property (strong, readonly) <Type2> property2;
@end
Jetzt können Sie Ihre Klassen A erstellen und B erbt von CommonClass
@interface A : CommonClass
@interface B : CommonClass
Das negiert den Vorteil der Erklärung sie in einem Protokoll. – Avi
Sie können die gemeinsamen Eigenschaftsdefinitionen in einer Header-Datei platzieren und schließen es in der Schnittstelle für jede Klasse.
Gemeinsame Header: Common-props.h
@property (nonatomic, retain) SomeType *common1;
@property (nonatomic, retain) SomeType *common2;
@property (nonatomic, retain) SomeType *common3;
Umsetzung: a.m
@interface A()
// Note: you have to use include, not import,
// to ensure the contents will be interpolated, no matter what.
#include "common-props.h"
@end
@implementation A
// Stuff
@end
Wiederholen Sie für die Klasse B.
Dieser Ansatz wird nicht empfohlen. Bei mir sowieso.
Was wäre der Vorteil, das zu tun? Jeder Vorteil in Bezug auf weniger Linien würde durch erhöhte Komplexität zunichte gemacht. – Droppy
Ja, Sie können sie in NSObject-Datei deklarieren. Fügen Sie dann die Headerdatei ein, in der Sie diese Eigenschaften verwenden müssen. Sie können dasselbe für Funktionen tun. – WasimSafdar
@Droppy, weniger Linien verringern die Komplexität, erhöhen sich nicht. – WasimSafdar