尝试将音乐项目附加到数组但超出范围错误(Swift)
Posted
技术标签:
【中文标题】尝试将音乐项目附加到数组但超出范围错误(Swift)【英文标题】:Trying to append music items to array but getting out of range error (Swift) 【发布时间】:2021-04-01 04:10:17 【问题描述】:我有一个应用程序可以在本地打印出列表中的所有用户歌曲。
这是数组:
var mySongs: [MPMediaItem] = []
这是获取歌曲的方式:
self.mySongs = MPMediaQuery.songs().items ?? []
我想循环遍历 mySongs 数组并将其中的特定歌曲添加到 newArray 中
for songs in mySongs
if songs.title == "Actin Crazy"
newArray[counter] = songs
counter+=1
但我收到此错误: 线程 1:致命错误:索引超出范围
我如何弄清楚它是如何/在哪里超出范围以解决这个问题?
【问题讨论】:
到底什么是“驼峰”?您知道title
是可选的吗?你知道什么是 Optional 吗?
@matt 标题仅用于示例条件,在这种情况下,如果歌曲具有我要查找的名称,我会将其移动到数组中。对我来说,驼峰是一堆被抛出的错误。我现在正在尝试以下方法,但没有遇到任何问题,你的想法是什么?对于 mySongs 中的歌曲 if song.title == "Wonderland" newArray[counter] = song counter+=1
在你的问题中加入真实的代码,给出真实的错误信息,具体询问你有什么困扰。
要将项目添加到数组的末尾,请使用newArray.append(songs)
- 您不能只引用不存在的索引,
就像@Paulw11 已经说过的,试试这个而不是循环:let mySongs = ["MPMediaItem] var newSongs: [String] = [] if let match = mySongs.first(where: $0.title == "a" ) newSongs.append(match) print(newSongs)
【参考方案1】:
你不能通过说来追加到数组
newArray[counter] = ...
要了解原因,假设数组为空。那你会说
newArray[0] = ...
但是数组是空的。没有newArray[0]
!因此,当应用程序运行时你会崩溃——出现超出范围的错误!任何时候用不存在的索引为数组下标都是非法的。
改为使用newArray.append(...)
。这就是它存在的原因。
但是,您的代码还有许多其他问题。特别是 MPMediaItem 的title
是可选的。您需要安全地打开它才能使用它。
【讨论】:
非常感谢您的回答马特,也感谢您对我的问题的批评,这将帮助我更好地使用这个网站!我的代码运行完美。我还将研究如何安全地打开可选项,以避免任何问题。以上是关于尝试将音乐项目附加到数组但超出范围错误(Swift)的主要内容,如果未能解决你的问题,请参考以下文章
Swift,CollectionView,致命错误:索引超出范围