尝试将音乐项目附加到数组但超出范围错误(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 致命错误:数组索引超出范围

Swift,CollectionView,致命错误:索引超出范围

致命错误:注册后索引超出范围(Firebase、Swift)

Swift:填充二维数组时出现索引超出范围错误

如何重新创建“索引超出数组范围”将项目添加到字典?