Как обновить MPNowPlayingInfoCenter в Swift?

В задаче c я использовал такой код для обновления MPNowPlayingInfoCenter:

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

Но в Swift не похоже, что функция setNowPlayingInfo распознается:

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

Есть ли что-то, что я упускаю?


person jmkr    schedule 17.06.2014    source источник
comment
попробуйте MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!", MPMediaItemPropertyTitle : "Title!], сеттеры/геттеры ведут себя в Swift совершенно иначе, чем в ObjC   -  person Jack    schedule 17.06.2014
comment
@JackWu большое спасибо. Да, все еще осваиваю Swift.   -  person jmkr    schedule 17.06.2014


Ответы (4)


В Swift геттеры/сеттеры работают по-другому. Поскольку больше нет свойств, как в ObjC, для вас нет автоматически сгенерированных сеттеров/геттеров. Вы должны просто получить доступ к переменной напрямую.

В вашем случае используйте:

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!",  MPMediaItemPropertyTitle : "Title!"]
person Jack    schedule 17.06.2014
comment
На сегодняшний день я не могу заставить его работать... получаю ошибку type String не соответствует протоколу AnyObject - person KennyVB; 14.01.2015

Swift 2, это также работает:

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

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo
person Franck    schedule 10.10.2015

Предыдущий ответ @Jack больше не работает как есть и требует некоторых изменений.

Компилятор Swift 3 жалуется на 2 вещи.

  • String нельзя напрямую преобразовать в AnyObject, поэтому два значения записи словаря должны быть приведены из String в AnyObject.
  • defaultCenter() был переименован в default().

поэтому жизнеспособный код будет выглядеть так:

MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist!" as AnyObject,  MPMediaItemPropertyTitle : "Title!" as AnyObject]
person Motti Shneor    schedule 04.07.2017

вы завернули его как строку?

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

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : artist,  MPMediaItemPropertyTitle : title]
person Rungsikorn    schedule 22.01.2015
comment
Строка не может быть использована для словаря медиа-информации - она ​​набрана [String: AnyObjec] - person Motti Shneor; 04.07.2017