2017-05-31 32 views
0

我正在swift 3.0中的一个项目中,我有一个元组数组来存储数据集。一旦我保存它们,我将这个元组数组转换为一个NSArray,然后使用另一个函数对该数组中的元素(对象)进行混洗。我的要求是访问这个重新调整的数组(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中的单个元素?

+0

你能解释一下你的要求,因为无法理解你的问题。 – KKRocks

+0

如果你能看到我的代码的底部,我粘贴了我洗过数组后得到的结果。我的要求是访问每个这些元素并分配给属性,正如我在 – danu

+0

下面提到的那样。为什么在这里使用'NSArray'?你扔掉类型信息。你的混洗功能将会更好地放在'MutableCollection'的扩展中,比较[我如何在Swift中对数组进行混洗?](https://stackoverflow.com/q/24026510/2976878)。你也许想在你的数组中使用实际的'struct'而不是元组。元组只能用于短期数据存储。 – Hamish

回答

0

首先,使用本机Swift结构,即数组而不是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应该给你同样的结果

+0

可以请你更正我的代码先生 – danu

+0

如果这没有回答你的问题,请更详细地解释你想实现什么。 –

+0

这是我想要达到的确切的东西。但从我的洗牌功能它返回一个NSArray的事实。我打印的结果。现在例如从那个结果我怎么能得到价值“史蒂文弗莱明”出并且将它分配给一个价值? – danu