特定索引处的Swift插入元素

Cit*_*tus 7 ios swift

我正在做一个有在线音乐流的项目.

  1. 我有一个名为Song的对象数组- 该数组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)
Run Code Online (Sandbox Code Playgroud)

我的想法是在这个游乐场代码中,它当然会产生错误,最后,我的问题是:使用这个插入atIndex的正确方法是什么?

Dam*_*ito 30

使用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]
Run Code Online (Sandbox Code Playgroud)

  • 尝试访问大于 a.count - 1 的索引时,如果未能检查索引是否合法,将导致“索引超出范围”。在这方面,@Shades 的回答更胜一筹。 (4认同)

Sha*_*des 21

这一行:

if myArray.count == 0 {
Run Code Online (Sandbox Code Playgroud)

第一次运行时只调用一次.使用此方法将数组长度至少设置为您尝试添加的索引:

var myArray = [String?]()

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

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

    myArray.insert(element, atIndex: index)
}
Run Code Online (Sandbox Code Playgroud)