![](/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.