#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, чем в ObjC2. @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]