如何在Swift中更新MPNowPlayingInfoCenter?

6
在Objective-C中,我一直使用这样的代码来更新MPNowPlayingInfoCenter:
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo: 
    @{ MPMediaItemPropertyArtist : @"Artist!",
        MPMediaItemPropertyTitle : @"Title! }];

但在Swift中,似乎无法识别函数“setNowPlayingInfo”:
MPNowPlayingInfoCenter.defaultCenter()....  // Can't identify 'setNowPlayingInfo()'

我是否遗漏了什么?


1
尝试使用以下代码:MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!", MPMediaItemPropertyTitle : "Title!],在Swift中,setter/getter的行为与ObjC有很大不同。 - Jack
@JackWu 非常感谢。是的,我还在努力掌握Swift。 - jmkr
3个回答

5
在Swift中,getter和setter的工作方式不同。因为没有像ObjC中那样的属性,也就没有自动生成的setter/getter供您使用。您应该直接访问变量。
在您的情况下,请使用以下代码:
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!",  MPMediaItemPropertyTitle : "Title!"]

截至今天,我无法让它工作...出现错误类型“String”不符合协议“AnyObject” - KennyVB

1

Swift 2,这也可以工作:

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

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo

0

@Jack之前的答案不再适用,需要进行一些修改。

Swift 3编译器会报告两个问题:

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

因此,可行的代码将如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接