我到处搜索,但找不到如何使用 Apple ITunesLibraryFramework 的快速示例。我一直在试图弄清楚如何在 Swift 5.2 中使用这个框架。
我想直接从音乐库中获取信息,而不必依赖 XML 库导出文件。
我的操场上有以下代码,它打印的内容不清晰。我将如何访问播放列表和 mediaItems 的字段并能够以人类可读的形式阅读它们?
我已经在项目中安装了框架。这是我的项目游乐场代码:
import Foundation
import iTunesLibrary
var library:ITLibrary
do {
let library = try ITLibrary(apiVersion: "1.1")
let mediaItems = library.allMediaItems
let playlists = library.allPlaylists
print("Media Folder Location - \(String(describing: library.mediaFolderLocation))")
print("\nPlaylists - \(playlists)")
print("\nTracks - \(mediaItems)")
} catch let error as NSError {
print(error)
}
这是我导入标题的 ITLibrary.m 文件:
#import <Foundation/Foundation.h>
#import <iTunesLibrary/iTunesLibrary.h>
当我在项目操场上运行上述代码时,我得到的只是播放列表和 mediaItems 的一堆二进制数据。我要做的就是遍历数据并从库中收集信息以用于我的程序。这可能很容易,但我还没有找到它。
编辑: - 使用@Vincent的回答后,我遇到了以下代码的另一个问题:
import Foundation
import iTunesLibrary
let library = try ITLibrary(apiVersion: "1.1")
typealias tracks = [NSNumber:TrackInfo]
var trackInfo = TrackInfo()
struct TrackInfo {
var title = ""
var artist = ""
var album = ""
var totalTime = 0
var year = 0
var persistentID = ""
var location:URL!
}
let songs = library.allMediaItems
let playlists = library.allPlaylists
for playlist in playlists {
if playlist.name.lowercased().contains("test-") {
print("New Playlist---------------\nName: \(playlist.name)")
for song in playlist.items {
trackInfo.title = song.title
print("\n\nNew Track-----------------\nTitle: \(trackInfo.title)")
if song.artist?.name != nil {
trackInfo.artist = song.artist?.name as! String
}
print("Artist: \(trackInfo.artist)")
trackInfo.album = song.album.title!
print("Albumn Name: \(trackInfo.album)")
trackInfo.totalTime = song.totalTime
print("Total Time: \(trackInfo.totalTime)")
trackInfo.year = song.year
print("Year: \(trackInfo.year)")
trackInfo.location = song.location!
print("Location: \(trackInfo.location!)")
var persistentID = song.persistentID
tracks.updateValue(song.persistentID, trackInfo)
}
}
}
我遇到的问题是将曲目信息放入 trackInfo 字典。我正在尝试使用 track persistentID (NSNumber) 作为我已声明的字典的键。出于某种原因,它不允许我使用它。