2017-01-10 1 views
0

는이 전클래스가 동일한 속성을 갖는 두 개의 프로토콜을 준수하면 어떻게됩니까?

@protocol Album<NSObject> 
@property(nonatomic, copy) NSString *name; 
@property(nonatomic, assign) NSUInteger trackCount; 
@end 

로 두 프로토콜

@protocol Playlist<NSObject> 
@property(nonatomic, copy) NSString *title; 
@property(nonatomic, assign) NSUInteger trackCount; 
@end 

다른이 있고 이러한 프로토콜

.H 파일

@interface MusicLibrary <Playlist, Album> 
@end 

을 준수하는 클래스가 있다고 가정 해 봅시다. 파일 :

@implementation MusicLibrary 
@synthesize title; 
@synthesize name; 
@synthesize trackCount; 
@end 

어떤 trackCount 속성이 참조 할 것입니까? trackCount를 두 번 사용할 수 있습니까?

확실히 컴파일 타임 오류가 없습니다.

+1

은 그들 중 어느 다스 려하지 않는, 그것은 변수, 그냥 답장을 보내 주셔서 –

+0

감사를 작동 그냥 구현하는 프로토콜입니다. 모호한 점이 없습니까? –

+0

아마도이 경우에 약간의 문제가 발생할 것입니다.하지만 앱 디자인에 대해 다시 생각해 봐야합니다. –

답변

0

귀하의 데이터를 잘못 모델링 한 것으로 보입니다. 음악 라이브러리 설정 방법은 재생 목록과 앨범 둘 다입니다. 더 정확한 모델에는 많은 재생 목록과 많은 앨범이 포함 된 MusicLibrary가 있다고 생각합니다. 같은 뭔가 :

@property (nonatomic, strong) NSArray<Album>* albums; 
@property (nonatomic, strong) NSArray<Playlist>* playlists; 
+0

헤이 존, 답장을 보내 주셔서 감사합니다. 네, 분명히 내 문제를 해결할 것입니다. 그러나 객관적인 C 컴파일러가이 시나리오를 어떻게 처리 할 것인지 이해하고 싶습니다. –

+1

프로토콜은 클래스가 메서드를 구현한다는 약속입니다. 그래서 MusicLibrary는 두 가지 약속을하고 있습니다. 하나는 'title'과 'trackCount'속성을 가지고 있고 다른 하나는 'name'과 'trackCount'속성을 가지고 있습니다. 따라서 MusicLibrary가 'title', 'name'및 'trackCount'를 구현하면 모든 약속이 성취됩니다. 클래스에 속한 'trackCount'속성은 하나뿐입니다. 프로토콜은 어떤 속성을 가지고 있지는 않습니다. 클래스가 그 속성들을 가질 것이라는 약속 일뿐입니다. –

+0

헤이 존, 답장을 보내 주셔서 감사합니다. 이제 알겠습니다! –

관련 문제