2017-05-31 70 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