2016-07-20 35 views
0

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

+0

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

+0

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

+0

@Droppy, weniger Linien verringern die Komplexität, erhöhen sich nicht. – WasimSafdar

Antwort

-1

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 
+0

Das negiert den Vorteil der Erklärung sie in einem Protokoll. – Avi

0

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.