2012-02-20 10 views
8

Mi idea es muy similar a declarar una variable de un tipo de interfaz en java.¿Puedo declarar una variable de tipo 'protocolo' en una interfaz Objective-C?

Así, por ejemplo,

archivo de cabecera 1:

@protocol Calculator 

@end 

luego defino una @interface CalculatorImpl que implementa el Calculator protocolo anterior.

En el archivo de cabecera 2:

@interface SomeViewController : UIViewController { 


} 

@property (weak, nonatomic) IBOutlet UITextField *txtResult; 
@property (weak, nonatomic) Calculator* calculator; 

@end 

Sin embargo, la bandera Xcode un error en la línea de cálculo

property with 'weak' attribute must be of object type 

¿Es este uso del protocolo permitido su uso por Objective-C?

Respuesta

18

A @protocol no es un tipo, por lo que no puede usarlo para el tipo de @property.

Lo que es probable que desee hacer en su lugar es la siguiente:

@property (weak, nonatomic) id <Calculator> calculator; 

Esto declara una propiedad sin restricción en su tipo, excepto que cumpla con el protocolo Calculator.

+0

¿Cómo crearías una propiedad sin restricciones en su tipo en swift, configurándola para que escriba anyobject? – Chris

4

Debe utilizar

@property (weak, nonatomic) id <Calculator> calculator; 

En Objective-C no se puede crear una instancia de un protocolo, sólo se le puede conformarse a ella. Por lo tanto, en lugar de tener un objeto de tipo Calculator, debe tener un objeto genérico que se ajuste al protocolo Calculator.

contrario, puede utilizar

@property (weak, nonatomic) CalculatorImpl* calculator; 

desde CalculatorImpl es una interfaz, no un protocolo.

Cuestiones relacionadas