我编写了以下函数,该函数读取iTunes目录中的媒体项列表并返回音乐文件。我需要退回"歌曲标题"但是当我运行它时,返回的项目是未知的格式。我很确定我需要通过属性过滤器运行它们或使用一些转换来正确获取实际名称。最后,我想输出一个字符串数组中的内容。我只在附加的屏幕截图中运行了四次循环。有人能指出我失踪的转换吗?看起来输出是十六进制格式,但不清楚。
class func readMusicFiles() -> NSMutableArray {
//var songDecoded:[NSMutableArray]
let result = NSMutableArray()
let allSongsQuery:MPMediaQuery = MPMediaQuery.songsQuery();
let tempArray:NSArray = allSongsQuery.items!;
for item:AnyObject in tempArray {
if (item is MPMediaItem) {
let temp = item as! MPMediaItem;
if (temp.mediaType != MPMediaType.Music) {
continue;
}
result.addObject(item);
}
}
print(result)
return result
}
}
输出看起来像这样
答案 0 :(得分:1)
“十六进制”不是“格式”;它只是对象内存地址的指示。忽略它。
你有你的媒体项目(在这种情况下是歌曲)。现在,不要说print(result)
,而是要求他们的头衔:
for song in result {
print(song.title)
}
或者,制作一个新阵列:
let titles = result.map {$0.title}
(另外,不要声明你的函数返回一个NSMutableArray。这是一个Cocoa的东西。试着坚持使用Swift数组。例如,如果你最终得到一个标题数组,那些就是字符串,所以返回一个[String]
。)