2012-02-20 15 views
8

La mia idea è molto simile a dichiarare una variabile di un tipo di interfaccia in java.Posso dichiarare una variabile di un tipo 'protocollo' in un'interfaccia Objective-C?

Così, per esempio,

file di intestazione 1:

@protocol Calculator 

@end 

ho quindi definire un @interface CalculatorImpl che implementa il protocollo sopra Calculator.

Nel file di intestazione 2:

@interface SomeViewController : UIViewController { 


} 

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

@end 

Tuttavia, la bandiera Xcode volontà un errore alla riga della calcolatrice

property with 'weak' attribute must be of object type 

È questo l'utilizzo di protocollo ha invalidato da Objective-C?

risposta

18

A @protocol non è un tipo quindi non è possibile utilizzarlo per il tipo di @property.

Quello che probabilmente vuole fare, invece è questo:

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

Questo dichiara una proprietà senza alcuna restrizione sul suo tipo, tranne che sia conforme al protocollo Calculator.

+0

Come crei una proprietà senza restrizioni sul suo tipo in swift, impostandola per digitare anyobject? – Chris

4

Si dovrebbe usare

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

In Objective-C non è possibile creare un'istanza di un protocollo, si può essere solo conforma ad esso. Pertanto, anziché avere un oggetto di tipo Calculator, si dovrebbe avere un oggetto generico conforme al protocollo Calculator.

In caso contrario è possibile utilizzare

@property (weak, nonatomic) CalculatorImpl* calculator; 

dal CalculatorImpl è un'interfaccia, non un protocollo.

Problemi correlati