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

#ios #swift #mpnowplayinginfocenter

#iOS #swift #mpnowplayinginfocenter

Вопрос:

В 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, чем в ObjC

2. @JackWu большое спасибо. Да, все еще осваиваюсь с Swift.

Ответ №1:

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

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

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

Комментарии:

1. На сегодняшний день я не могу заставить его работать… получить сообщение об ошибке типа «String» не соответствует протоколу «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 жалуется на 2 вещи.

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

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

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