我目前正在尝试Stephen Kochan编写的“Objective-C编程”第9章练习9。以下是练习的说明:定义三个新类,分别称为Song,Playlist和MusicCollection。歌曲对象将包含有关特定歌曲的信息,例如标题,艺术家,专辑和播放时间。播放列表将包含播放列表的名称和歌曲集合。 MusicCollection对象将包含一组播放列表,包括一个名为库的特殊主播放列表,其中包含集合中的每首歌曲。定义这三个类并编写方法来执行以下操作: - 创建一个Song对象并设置其信息 - 创建播放列表对象,并将歌曲添加到播放列表中删除歌曲。如果主歌曲播放列表尚未添加,则应将新歌曲添加到主播放列表中。确保如果从主播放列表中删除了一首歌曲,它也会从音乐收藏中的所有播放列表中删除
这是我的main.m和playlist.m(假设所有其他文件都正常运行)
#import <Foundation/Foundation.h>
#import "Song.h"
#import "Playlist.h"
#import "MusicCollection.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *aTitle = @"Days to Come";
NSString *aArtist = @"Seven Lions";
NSString *aAlbum = @"Seven Lions-EP";
NSString *aPlaytime = @"4:44";
NSString *bTitle = @"Red Lights";
NSString *bArtist = @"Tiesto";
NSString *bAlbum = @"Red Lights";
NSString *bPlaytime = @"4:24";
NSString *cTitle = @"Pressure-Alesso Remix";
NSString *cArtist = @"Nadia Ali";
NSString *cAlbum = @"Pressure (The Remixes)";
NSString *cPlaytime = @"6:06";
NSString *dTitle = @"Neon - Club Mix";
NSString *dArtist = @"Sander Van Doorn";
NSString *dAlbum = @"Neon";
NSString *dPlaytime = @"5:59";
NSString *eTitle = @"Into the Light";
NSString *eArtist = @"Mako";
NSString *eAlbum = @"Into the Light-Single";
NSString *ePlaytime = @"6:18";
Song *single1 = [[Song alloc] init];
Song *single2 = [[Song alloc] init];
Song *single3 = [[Song alloc] init];
Song *single4 = [[Song alloc] init];
Song *single5 = [[Song alloc] init];
[single1 setTitle: aTitle andArtist: aArtist];
[single1 setAlbum: aAlbum andTime: aPlaytime];
[single2 setTitle: bTitle andArtist: bArtist];
[single2 setAlbum: bAlbum andTime: bPlaytime];
[single3 setTitle: cTitle andArtist: cArtist];
[single3 setAlbum: cAlbum andTime: cPlaytime];
[single4 setTitle: dTitle andArtist: dArtist];
[single4 setAlbum: dAlbum andTime: dPlaytime];
[single5 setTitle: eTitle andArtist: eArtist];
[single5 setAlbum: eAlbum andTime: ePlaytime];
MusicCollection *myMusic = [[MusicCollection alloc] initWithName: @"myMusic"];
Playlist *masterplay = [[Playlist alloc] initWithName: @"library"];
[myMusic addPlaylist: masterplay];
Playlist *playlist1 = [[Playlist alloc] initWithName: @"Playlist 1"];
Playlist *playlist2 = [[Playlist alloc] initWithName: @"Playlist 2"];
[masterplay addSong: single1];
[masterplay addSong: single2];
[masterplay addSong: single3];
[masterplay addSong: single4];
[masterplay addSong: single5];
[playlist1 addSong: single3];
[playlist1 addSong: single4];
[playlist2 addSong: single5];
[masterplay list];
}
return 0;
}
//这是Playlist.m
#import "Playlist.h"
@implementation Playlist
@synthesize playListName, fulllist;
-(id) initWithName: (NSString *) name
{
self = [super init];
if (self) {
playListName = [NSString stringWithString: name];
fulllist = [NSMutableArray array];
}
return self;
}
-(void) addSong: (Song *) theSong
{
if (![fulllist containsObject: theSong])
{
[fulllist addObject: theSong];
}
}
-(void) list
{
for (Song *theSong in fulllist){
NSLog (@"%-20s %-32s", [theSong.title UTF8String], [theSong.artist UTF8String]);
NSLog (@"%-20s %-32s", [theSong.album UTF8String], [theSong.playtime UTF8String]);
}
}
-(void) removeSong: (Song *) theSong
{
[fulllist removeObjectIdenticalTo:theSong];
}
@end
正如你在main.m中看到的那样,我将一首歌曲添加到库中,然后再添加到另一个播放列表中。如何更改我的addSong方法,以便在将歌曲添加到另一个播放列表之前自动将歌曲添加到库中(如果它尚未存在)?类似地,如何更改我的removeSong方法,以便它从任何播放列表中自动删除特定歌曲(如果从库中删除)?