0
다음과 같은 목적으로 유사한 방법을 리팩터링하는 방법 (목표 C)?객관적인 C에 대한 유사한 방법 리펙토링
- (void)insertNewSong:(Song *)newSong forArtist:(Artist *)artist {
NSMutableArray *newSongList = [[artist songs] mutableCopy];
BOOL hasInserted = NO;
for (int i = 0; i < [[artist songs] count]; i++) {
Song *existingSong = [[artist songs] objectAtIndex:i];
if ([[newSong title] caseInsensitiveCompare:[existingSong title]] == NSOrderedAscending) {
[newSongList insertObject:newSong atIndex:i];
hasInserted = YES;
break;
}
}
if (hasInserted == NO) {
[newSongList addObject:newSong];
}
artist.songs = newSongList;
}
- (void)insertNewArtistToSongList:(Artist *)newArtist {
BOOL hasInserted = NO;
for (int i = 0; i < [_artists count]; i++) {
Artist *existingArtist = [_artists objectAtIndex:i];
if ([[newArtist name] caseInsensitiveCompare:[existingArtist name]] == NSOrderedAscending) {
[_artists insertObject:newArtist atIndex:i];
hasInserted = YES;
break;
}
}
if (hasInserted == NO) {
[_artists addObject:newArtist];
}
}
insertNewSong 메서드의 경우 각 Song 개체가 들어있는 NSMutableArray [아티스트 노래]가 사용됩니다. insertNewArtist 메소드의 경우 각 아티스트 객체를 포함하는 NSMutableArray 인스턴스 변수 _artists가 사용됩니다.
두 가지 방법 모두 입력 개체의 텍스트 속성과 배열 내에있는 텍스트 속성을 비교하여 개체를 NSMutableArray에 삽입합니다.
현재 위의 방법에는 몇 가지 중복이 있지만 이해하기 쉽습니다 (필자의 경우). 좀 더 일반적인 방법으로 단순화하는 방법이 있을지, 가독성을 해치지 않습니까?
배열이어야합니까? 배열이 아닌 변경 가능 세트를 사용하면 기본 addObject 메소드가 사용자 정의 클래스의 isEqual을 오버라이드하여 적절한 문자열 특성을 비교할 때 필요한만큼 제공합니다. – mbehan