![](/img/trans.png)
[英]Cannot assign a value of type 'nil' to a value of type 'NSMutableArray'
[英]Cannot assign value of type NSMutableArray to type UIBarButtonItem
我正在開發一個iOS音頻應用程序作為一個學習項目。 我在其中一個功能中遇到問題,該功能可以檢查播放器是在播放還是在暫停/停止。 如果正在播放,則應將按鈕欄中的按鈕更改為“暫停”按鈕,或者如果已暫停或停止,則將其更改為“播放”按鈕。 我將按鈕欄項目作為NSMutableArray分配給變量“ items”,然后對按鈕進行必要的更改,然后將“ items”分配回按鈕欄項目以更新顯示。
在我的代碼中,我在網上遇到了一個錯誤:
self.toolbar.items = items
錯誤消息是
無法將類型NSMutableArray的值分配給類型UIBarButtonItem
我假設我需要轉換NSMutableArray,我嘗試使用Array,但當我這樣做時錯誤消失了,但是按鈕壞了。
我的代碼的相關部分是:
@IBOutlet weak var toolbar: UIToolbar!
@IBOutlet var playButton: UIBarButtonItem!
@IBAction func playPausePressed(sender: AnyObject) {
let playbackState = self.player.playbackState as MPMusicPlaybackState
let items = NSMutableArray(array: self.toolbar.items!)
if playbackState == .Stopped || playbackState == .Paused{
self.player.play()
items[2] = self.pauseButton
} else if playbackState == .Playing{
self.player.pause()
items[2] = self.playButton
}
self.toolbar.items = items
}
任何幫助或指示將不勝感激。 謝謝!
發生錯誤是因為NSMutableArray
與Swift Array
無關
為什么不直接使用本機屬性? 由於引用語義,因此不必創建臨時數組。
@IBAction func playPausePressed(sender: AnyObject) {
let playbackState = self.player.playbackState as MPMusicPlaybackState
var items = self.toolbar.items!
if playbackState == .Stopped || playbackState == .Paused{
self.player.play()
items[2] = self.pauseButton
} else if playbackState == .Playing{
self.player.pause()
items[2] = self.playButton
}
}
我覺得您可以做得更好。 您是否真的需要在兩個不同的按鈕之間進行切換items[2]
?
UIBarButtonItem
可以像具有不同狀態的常規UIButton
使用。 我假設您想在播放器暫停/播放時在播放和暫停圖像之間切換。 您可以通過在UIBarButtonItem( setBackgroundImage(_:forState:barMetrics:)
)中設置兩個不同的圖像,然后在playbackState更改時設置適當的狀態來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.