如何在 Swift 中更新 MPNowPlayingInfoCenter?

Posted

技术标签:

【中文标题】如何在 Swift 中更新 MPNowPlayingInfoCenter?【英文标题】:How to update MPNowPlayingInfoCenter in Swift? 【发布时间】:2014-08-07 21:19:30 【问题描述】:

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

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

但在 Swift 中,似乎无法识别函数“setNowPlayingInfo”:

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

我有什么遗漏的吗?

【问题讨论】:

尝试MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!", MPMediaItemPropertyTitle : "Title!],setter/getter 在 Swift 中的行为与 ObjC 完全不同 @JackWu 非常感谢。是的,仍然掌握 Swift 的窍门。 【参考方案1】:

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

在你的情况下,使用:

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

【讨论】:

截至今天,我无法让它工作...收到错误type "String" does not conform to protocol 'AnyObject'【参考方案2】:

Swift 2,这也可以:

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

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo

【讨论】:

【参考方案3】:

@Jack 之前的回答不再按原样工作,需要进行一些修改。

Swift 3 编译器抱怨两件事。

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

所以一个可行的代码应该是这样的:

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

【讨论】:

以上是关于如何在 Swift 中更新 MPNowPlayingInfoCenter?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中访问命令行参数?

如何在 swift 3 中获取和更新 Healthkit 中的高度?

如何在ios,swift中更新子控制器中的数据

即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新

如何在 swift/iOS 中更新谷歌地图标记位置

如何在 Realm Swift 中更新对象