在 Swift 中特定索引处插入元素

11

我正在做一个在线音乐流媒体项目。

  1. 我有一个名为Song的对象数组 - 每首歌曲在该数组中都有来自SoundCloud的URL。

  2. 快速枚举每一首歌曲,然后调用SoundCloud Resolve API获取每首歌曲的直接流媒体URL。并将每个直接URL存储到数组中并加载到我的播放器中。

这似乎很容易,但#2步骤是异步的,因此每个直接URL可能会被存储到错误的数组索引中。我考虑使用Insert AtIndex而不是append,所以我在Playground中编写了示例代码,因为我的所有想法都无法成功地使直接URL的存储保持其顺序。

var myArray = [String?]()

func insertElementAtIndex(element: String?, index: Int) {

    if myArray.count == 0 {
        for _ in 0...index {
            myArray.append("")
        }
    }

    myArray.insert(element, atIndex: index)
}

insertElementAtIndex("HELLO", index: 2)
insertElementAtIndex("WORLD", index: 5)

我的想法在这个游乐场代码中,当然会产生一个错误,最后,我的问题是:如何正确使用这个insert atIndex

3个回答

41

现在使用Swift 3非常简单:

// Initialize the Array
var a = [1,2,3]

// Insert value '6' at index '2'
a.insert(6, atIndex:2)

print(a) //[1,2,6,3]

4
如果未检查索引是否合法,在尝试访问大于a.count-1的索引时将导致“索引超出范围”的错误。在这方面,@Shades的答案更为优秀。 - Martyn Chamberlin
1
如果数组是字符串类型,会出现这个错误 Cannot convert value of type 'Int' to expected argument type 'String.Index' - Awais Fayyaz

29

这一行:

if myArray.count == 0 {

该函数只会在第一次运行时被调用一次。可以使用它来获取数组长度,以至少达到您试图添加的索引:

var myArray = [String?]()

func insertElementAtIndex(element: String?, index: Int) {

    while myArray.count <= index {
        myArray.append("")
    }

    myArray.insert(element, atIndex: index)
}

我会这样重写整个循环条件:while myArray.count <= index - Martyn Chamberlin

4

swift 4

func addObject(){
   var arrayName:[String] = ["Name0", "Name1", "Name3"]
   arrayName.insert("Name2", at: 2)
   print("---> ",arrayName)
}

Output: 
---> ["Name0","Name1", "Name2", "Name3"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接