2016-05-20 9 views
0

Ich versuche append zwei StingArrays in tuple aber es gibt mir einen Fehler? imageZwei String Arrays in Tuple anfügen

Das ist meine Klasse:

import UIKit 
var tuple : [(String, String)] = [] 
class ViewController: UIViewController , UICollectionViewDelegate{ 

    let reuseIdentifier = "cell" 

    var url : [String] = [] 
    var image : [String] = [] 

    override func viewDidLoad(){ 

    } 


    override func viewWillAppear(animated: Bool) { 

     for i in tuple{ 

      url.append(i.0) 
      image.append(i.1) 
      print("URL values.............. \(url)") 
      print("Image values.............. \(image)") 
     } 


     NSUserDefaults.standardUserDefaults().setObject(url, forKey: "u") 
     NSUserDefaults.standardUserDefaults().setObject(image, forKey: "i") 
     NSUserDefaults.standardUserDefaults().synchronize() 


     var u = NSUserDefaults.standardUserDefaults().objectForKey("u") 
     var i = NSUserDefaults.standardUserDefaults().objectForKey("i") 

     tuple.removeAll() 
     tuple.append(u,i) 

    } 

Wenn ich die Typen dies ändern:

var u : String = NSUserDefaults.standardUserDefaults().objectForKey("u") as! String 
var i : String = NSUserDefaults.standardUserDefaults().objectForKey("i") as! String 

es mir jetzt gibt diesen Fehler:

enter image description here

Wie kann Ich füge ein Tupel an ein Array an?

+2

Ich würde kein Array 'Tupel' nennen. Es ist ein bisschen irreführend – Daniel

+1

Sie können Tupel benennen: 'var images: [(url: String, image: String)] = []'. Sie können dann 'url.append (i.url); image.append (i.image) 'anstelle von' url.append (i.0); image.append (i.1) ' – Daniel

+2

In einer For-Schleife steht' i' für den Index, während Ihr i ein Tupel enthält. Sie sollten also lieber etwas wie "für Tupel in Bildern" machen (die Benennung ist wichtig für sauberen Code). – Daniel

Antwort

1

[Code entfernt]

Auch, wie ein Benutzer, den Sie in Kommentar gesagt, Namensgebung ein Array tuple schlechte Gewohnheit ist. Der Name tuples passen würde schon viel besser

EDIT: Wie @ originaluser2 sagte, Sie auch tuple.append((u,i))

EDIT2 verwenden können: Ich denke, das ist auf jeden Fall, was Sie suchen (ich auch die Namen, angepasst um Verwirrung zu vermeiden, Sie sollten auch)

import UIKit 

class ViewController: UIViewController , UICollectionViewDelegate{ 

    let reuseIdentifier = "cell" 

    var tuples: [(String, String)] = [] 

    var urls: [String] = [] 
    var images: [String] = [] 

    override func viewDidLoad(){ 

    } 


    override func viewWillAppear(animated: Bool) { 

     for i in tuples { 

      urls.append(i.0) 
      images.append(i.1) 
      print("URL values.............. \(urls)") 
      print("Image values.............. \(images)") 
     } 


     NSUserDefaults.standardUserDefaults().setObject(urls, forKey: "u") 
     NSUserDefaults.standardUserDefaults().setObject(images, forKey: "i") 
     NSUserDefaults.standardUserDefaults().synchronize() 

     // Cast objects as NSArray, since it's a subclass of NSObject 
     // Only NSObject derivate classes can be used for these purposes 
     let u = NSUserDefaults.standardUserDefaults().objectForKey("u") as! NSArray 
     let i = NSUserDefaults.standardUserDefaults().objectForKey("i") as! NSArray 

     tuples.removeAll() 

     // For every element of the first NSArray 
     for index in 0 ..< u.count { 
      // Append in the tuples array the strings at position index 
      // of both array 
      // NSString and String class are bridged, so you can use them both 
      // in order to accomplish your needs. An NSArray btw can store NSString, but not String objects 
      tuples.append((u.objectAtIndex(index) as! String,i.objectAtIndex(index) as! String)) 
     } 
    } 
} 
+0

Dank, aber es gibt mir diesen Fehler https://drive.google .com/open? id = 0B29ka7gbDAYxY0lQMnNGnM3R1E – AzKa

+0

Dann versuchen Sie, etwas falsch zu machen: Speichern als String ein Objekt, das kein String in einem String ist, String Tupel Array. Sie sollten besser an Ihrem Datenmodell denken – BlackBox

+0

Ich änderte tup zu 'let tup = (" \ (u) "," \ (i) ")' jetzt funktioniert es und fügt 'tuple' hinzu. Aber es fügt auch '(\ n \' on start und '\ '\ n)' an den Enden hinzu. wie dieses '[(\ n \" https: //www.youtube.com/watch? v = 9h30Bx4Klxg \ "\ n)", "(\ n \" 1.jpg \ "\ n)")] ' Wissen Sie oder irgendeine Idee, warum es mit diesem? – AzKa