2017-04-20 11 views
0

지금 재생중인 항목의 속성 수를 받으려고합니다. 당 애플 문서 :MPMediaItem (Swift 3)에서 enumerateValues ​​(forProperties : using :) 메서드를 사용하는 방법

언제든지 앱이 프로퍼티 키 세트를 통해 열거, 하나 개 이상의 속성을 액세스하는 각 개별 속성을 가져 오는 것보다 더 효율적입니다.

그래서 나는 그들의 방법을 사용하려 :

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]) 
} 

어떻게 제대로 사용하려면?

답변

0

마지막으로 나는 그것을 사용하는 방법을 알아 냈습니다. - https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

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 
} 

이 문서는 나에게 적절한 사용을 이해하는 데 도움이 다음과 같이 그래서 난 내 기능을 다시 썼다