0

私はiOSを初めて使用しますが、これが可能かどうかはわかりません。

基本的に私には親と子の2つのクラスがあります。

親には、ParentProtocolに準拠するデリゲートがあります。ただし、Childのデリゲートは、ParentProtocolだけでなく、別のChildProtocolにも準拠しています。

それで、次のことを行うことは可能ですか?

@interface Parent {
  @property (nonatomic, unsafe_unretained) id<ParentProtocol> delegate;
}

@interface Child : Parent {
  @property (nonatomic, unsafe_unretained) id<ParentProtocol, ChildProtocol> delegate;
}
4

1 に答える 1

4

はい、これは有効なコードです。これは、メソッドを宣言することになります

- (id<ParentProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol>)delegate;

インターフェイスで同じセレクター (および)Parentのメソッドを宣言する-delegate-setDelegateChild

- (id<ParentProtocol, ChildProtocol>)delegate;
- (void)setDelegate:(id<ParentProtocol, ChildProtocol>)delegate;

id<ParentProtocol>id<ParentProtocol, ChildProtocol>は互換性のある型であるため、これは許容されます (警告は発生しません) 。(これを、 inChildの宣言delegateが型であると宣言する状況と比較してくださいNSArray *。警告が表示されProperty type 'NSArray *' is incompatible with type 'id<ParentProtocol>' inherited from 'Parent'ます。)

ちなみに、以下のように書くChildProtocolことで継承するように定義できることは注目に値します。ParentProtocol

@protocol ParentProtocol <NSObject>
//....
@end

@protocol ChildProtocol <ParentProtocol>
//....
@end

これにより、次のインターフェイスに書き込むことができますChild

@property (nonatomic, unsafe_unretained) id<ChildProtocol>;

それよりも

@property (nonatomic, unsafe_unretained) id<ParentProtocol, ChildProtocol>;
于 2012-10-17T03:42:30.663 に答える