如何在MPMediaItem中使用enumerateValues(forProperties:using :)方法(Swift 3)

问题描述:

我试图接收Now Playing项目的属性数目。 每苹果文档:如何在MPMediaItem中使用enumerateValues(forProperties:using :)方法(Swift 3)

每当应用程序访问一个以上的财产,列举了一组属性键的比取每一个人财产更有效。

于是,我就用自己的方法:

func enumerateValues(forProperties properties: Set<String>, 
       using block: @escaping (String, Any, UnsafeMutablePointer<ObjCBool>) -> Void) 

但我就是不明白应该如何使用。

我的代码:

//MARK: Properties 
var allProperties: [String: Any] 
var albumTitle: String? 
var albumArtist: String? 
var title: String? 
var artist: String? 
var artwork: UIImage? 
var genre: String? 
var lyrics: String? 
var releaseDate: Date? 
var playbackDuration: TimeInterval? 
var rating: Int? 
var assetURL: URL? 
var isExplicitItem: Bool? 
var isCloudItem: Bool? 
var hasProtectedAsset: Bool? 

let propertiesSet: Set<String> = [MPMediaItemPropertyAlbumTitle, 
          MPMedia​Item​Property​Album​Artist, 
          MPMediaItemPropertyTitle, 
          MPMedia​Item​Property​Artist, 
          MPMediaItemPropertyArtwork, 
          MPMedia​Item​Property​Genre, 
          MPMedia​Item​Property​Lyrics, 
          MPMedia​Item​Property​ReleaseDate, 
          MPMedia​Item​Property​Playback​Duration, 
          MPMedia​Item​Property​Rating, 
          MPMedia​Item​Property​Asset​URL, 
          MPMediaItemPropertyIs​Explicit, 
          MPMediaItemPropertyIs​Cloud​Item, 
          MPMediaItemPropertyHas​Protected​Asset] 

func getAllMetadata() { 
    allProperties = nowPlaying?.enumerateValues(forProperties: propertiesSet, 
           using: //No idea what to put here 
     -> [String: Any]) 
} 

如何正确使用它?

最后我想出了如何使用它。所以我重新写我的功能如下:

func getAllMetadata() { 
    var allProperties: [String: Any] = [:] 
    nowPlaying?.enumerateValues(forProperties: propertiesSet, using: {key,value,_ in allProperties[key] = value}) 

    albumTitle = allProperties["albumTitle"] as? String 
    //and so on 
} 

本文档可以帮助我了解如何正确使用 - https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html