3

これは Swift 1 で動作しますが、Swift 2 ではエラーが報告されます。

let image:UIImage = UIImage(named: getStringForLanguage(french: "lock_en", english: "lock_fr.") as! String)!
let albumArt = MPMediaItemArtwork(image: image)
let songInfo: NSMutableDictionary = [
    MPMediaItemPropertyTitle: "",
    MPMediaItemPropertyArtist: "",
    MPMediaItemPropertyArtwork: albumArt
]


MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo // this reports the error

エラーメッセージ:

タイプ「NSMutableDictionary」の値をタイプ「[String : AnyObject]」の値に代入できませんか?

4

1 に答える 1

2

あなたは私のコメントに文字通り従いました。:)

つまり、 for の型がfrom Foundationではなく.nowPlayingInfoSwift 辞書になっているということです。[String : AnyObject]?NSMutableDictionary

また、Swift 2 のコンパイラは辞書の型を正しく推測するため、型を宣言する必要はありません。

書くだけ:

let songInfo = [
    MPMediaItemPropertyTitle: "",
    MPMediaItemPropertyArtist: "",
    MPMediaItemPropertyArtwork: albumArt
]

明示的にする必要がある場合、正しい型はDictionary(動作しますが) ではなく、次の[String : AnyObject]?とおりです。

let songInfo: [String: AnyObject]? = [
    MPMediaItemPropertyTitle: "",
    MPMediaItemPropertyArtist: "",
    MPMediaItemPropertyArtwork: albumArt
]

.nowPlayingInfoプロパティは nil に設定できるため、型は Optional です。

于 2015-10-09T20:33:40.993 に答える