如何在Swift中更新MPNowPlayingInfoCenter?

时间:2014-06-17 18:34:31

标签: ios swift mpnowplayinginfocenter

在目标c中,我一直在使用这样的代码来更新MPNowPlayingInfoCenter:

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo: 
    @{ MPMediaItemPropertyArtist : @"Artist!",
        MPMediaItemPropertyTitle : @"Title! }];

但是在Swift中,它似乎不像函数" setNowPlayingInfo"被认可:

MPNowPlayingInfoCenter.defaultCenter()....  // Can't identify 'setNowPlayingInfo()'

我有什么遗失的吗?

4 个答案:

答案 0 :(得分:5)

在Swift中,getter / setter的工作方式不同。由于ObjC中没有其他属性,因此没有自动生成的setter / getter。您应该直接访问变量。

在您的情况下,请使用:

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!",  MPMediaItemPropertyTitle : "Title!"]

答案 1 :(得分:1)

Swift 2,这也有效:

let songInfo: [String:AnyObject] = [
         MPMediaItemPropertyTitle: mySoundTrack.TrackName,
         MPMediaItemPropertyArtist: String(mySoundTrack.TrackID),
         MPMediaItemPropertyArtwork: albumArt
]

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo

答案 2 :(得分:0)

@Jack以前的回答不再有效,需要进行一些修改。

Swift 3编译器抱怨了两件事。

  • String不能直接转换为AnyObject,因此必须将两个字典条目值从String转换为AnyObject。
  • defaultCenter()已重命名为default()

所以一个可行的代码看起来像这样:

MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!" as AnyObject,  MPMediaItemPropertyTitle : "Title!" as AnyObject]

答案 3 :(得分:-2)

你把它包裹成字符串吗?

var artist = dictionary["artist"]! as String
var title = dictionary["title"]! as String

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : artist,  MPMediaItemPropertyTitle : title]