2017-05-31 13 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の代わりにArrayを使用します。 名前付きタプルの要素には、次のようにアクセスできます。 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を返します。結果は私が印刷しました。今のところ、その結果から "Steven Flemin"という値をどのように取得して値に割り当てることができますか? – danu