2016-03-20 7 views
0

initialisiert werden. Ich suche ein Datenmodell, das vom Benutzer im View Controller erstellt und dann über prepareForSegue an andere View-Controller übergeben wird.Das Modell kann nicht in Swift

In meinem View-Controller kann ich das Modell jedoch nicht verwenden und erhalte Fehler für unverpackte optionale Werte.

ich habe:

Class Collection: NSObject { 
    var id: String! 
    var image: String! 
    var apples: Int? 
    var oranges: Int? 
    var lemons: Int? 
} 

init(id: String, image: String, apples: Int, oranges: Int, lemons: Int) { 
    super.init() 
    self.id = id 
    self.photo = photo 
    self.apples = apples 
    self.oranges = oranges 
    self.lemons = lemons 
} 

-View-Controller:

var collection: Collection! 
... 
    // if user selects a number .. 
    self.collection.oranges = usersSelection 
    self.collection.apples = usersSelection 
    etc 

Kann mir jemand sagen, was mache ich falsch bitte? Vielen Dank!

+0

Haben Sie den initializer von 'Collection' nennen? – Sweeper

+0

Im View Controller ja. Wenn ich rufe var collection = Sammlung (ID: "", Foto: "", Äpfel: 0, Orangen: 0, Zitronen: 0) es funktioniert, aber ich kann nicht auf die Eigenschaften zugreifen, um sie mit Punktnotation zu ändern. – Dazzle

+0

Warum eine NSObject-Unterklasse? Sie könnten einfach eine Struktur verwenden. – Abizern

Antwort

0

Definieren Sie Ihre Modellklasse wie folgt aus:

class Collection: NSObject { 
    var id: String! 
    var image: String! 
    var apples: Int? 
    var oranges: Int? 
    var lemons: Int? 

    init(id: String, image: String, apples: Int?, oranges: Int?, lemons: Int?) { 

     super.init() 
     self.id = id 
     self.image = image 

     if let _ = apples{ 
      self.apples = apples 
     } 
     if let _ = oranges{ 
      self.oranges = oranges 
     } 
     if let _ = lemons{ 
      self.lemons = lemons 
     } 

    } 

} 

Dann in Ihrem Viewcontroller wie folgt implementieren:

class ViewController: UIViewController { 
    var collection: Collection! 

    override func viewDidLoad() { 
     collection = Collection(id: "user selection", image: "useselection", apples: nil, oranges: nil, lemons: nil) 
//  collection.image = 
//  colection.oranges = 
//  ........ 

    } 
} 
+0

Danke dafür. Ich habe das ausprobiert und bekomme einen Fehler "Nil ist nicht kompatibel mit Argument Typ Int" – Dazzle

+0

Aber vor dem Post die Antwort habe ich meinen Code in Spielplatz überprüft. Können Sie Ihre Fehler teilen? – iMuzahid

+0

Für Ihren Vorschlag, mein Fehler ist, dass Nil nicht mit erwarteten Argument Typ "Int" kompatibel ist – Dazzle

Verwandte Themen