如何在 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 3 中获取和更新 Healthkit 中的高度?