【问题标题】:How to update MPNowPlayingInfoCenter in Swift?如何在 Swift 中更新 MPNowPlayingInfoCenter?
【发布时间】: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 的窍门。

标签: ios swift mpnowplayinginfocenter


【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 2018-01-16
      • 2016-01-07
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      相关资源
      最近更新 更多