从元组NSArray访问元素

时间:2017-05-31 08:39:30

标签: swift nsarray

我正在使用swift 3.0中的一个项目,我有一个用于存储数据集的元组数组。一旦我保存它们,我将这个元组数组转换为NSArray,并使用另一个函数对该数组中的元素(对象)进行洗牌。我的要求是访问这个重新调整的数组(NSArray)中的元素。我的代码如下(请阅读评论以便更好地理解)。

这是我将数据保存到元组数组的地方

 var savedSongsArray:[(title:String,healerName:String,trackUrl:URL,imageUrl: String)] = []

func getAllTracksFromSavedPath(){
        for i in 0 ..< trackIdsArray.count{

             savedSongsArray.append((title: songDetailsArray[i].title , healerName:songDetailsArray[i].healerName, trackUrl: uRL, imageUrl: songDetailsArray[i].imageUrl))
            //savedSongsArray is my tuple array
        }

    let arrayToBeShuffled = savedSongsArray as NSArray // This is where I convert it to a NSArray
}

我的随机播放功能

    func shuffledSongsArray(array:NSArray) -> NSArray {
    let mutableArray = array.mutableCopy() as! NSMutableArray
    let count = mutableArray.count
    if count>1 {
        for i in ((0 + 1)...count-1).reversed(){
            mutableArray.exchangeObject(at: i, withObjectAt: Int(arc4random_uniform(UInt32(i+1))))
        }
    }

    return mutableArray as NSArray
}

一旦我将mutableArray的结果打印为下面的

("indika - (index.jpeg)", "Steven Flemin", file:///Users/auxenta/Library/Developer/CoreSimulator/Devices/2B4EB1F8-FA38-4777-A274-10979F6EEB6F/data/Containers/Data/Application/CAB78797-8AB2-4DD9-8322-6F88B454BA74/Documents/5746821397741568.mp3, "https://storage.googleapis.com/feisty-beacon-159305.appspot.com/images.png")

如何访问此元组NSArray中的各个元素?

1 个答案:

答案 0 :(得分:0)

首先,使用本机Swift结构,即Array而不是NSArray和NSMutableArray。 您可以像这样访问命名元组的元素: let title = array[n].title,其中n是您要访问的元组的索引,title是您想要获取的元组的命名元素。

这应该有效:

func shuffledSongsArray(array:[(title:String,healerName:String,trackUrl:URL,imageUrl: String)]) -> [(title:String,healerName:String,trackUrl:URL,imageUrl: String)] {
    let shuffledArray: [(title:String,healerName:String,trackUrl:URL,imageUrl: String)] = []
    //do the shuffling here
    return shuffledArray
}

let result = shuffledSongsArray(array: inputArray)
let firstHealerName = result[0].healerName

let firstHealerName = result[0].1应该会给你相同的结果