2016-05-10 7 views
0

SO habe ich zwei Modelle; Kontakt und Gruppe und archivieren/entpacken ihre Daten über NSCoder. Bedenken Sie:Kann Wert von Typ SomeObject zu SomeObject nicht zuweisen?

class Contact 
{ 
    var id: Int = default_value 
    var name: String = "" 
    var number: String = "" 

    init?(Id:Int, Name:String, Number:String) 
    { 
     self.id = Id 
     self.name = Name 
     self.number = Number 
     super.init() 
     if Id == default_value{ 
      return nil 
     } 
    } 

    // MARK: NSCoding 
    func encodeWithCoder(aCoder: NSCoder) 
    { 
     aCoder.encodeInteger(id, forKey: "id") 
     aCoder.encodeInteger(name, forKey: "name") 
     aCoder.encodeBool(number, forKey: "number") 
    } 

    required convenience init?(coder aDecoder: NSCoder) 
    { 
     let Id = aDecoder.decodeIntegerForKey("id") 
     let Name = aDecoder.decodeIntegerForKey("name") 
     let Number = aDecoder.decodeBoolForKey("number") 
     self.init(Id:Id, Name:Name, Number:Number) 
    } 
} 

Das ist wirklich in Ordnung geht, aber wenn ich versuche, Kontakt in meiner Gruppe Modellen zu verwenden, es vermasselt nur bis schlecht = diesem Fehler „Kontakt Kann nicht zuweisen Wert vom Typ Kontakt?“ Gibt;

class group 
{ 
    var id: Int = default_value 
    var contact = Contact?.self //wont let me declare a Contact 

    init?(Id:Int, cont:Contact) 
    { 
     self.id = Id 
     self.contact = cont //Cannot assign Value of type Contact to Contact? 
     super.init() 
     if Id == default_value{ 
      return nil 
     } 
    } 

    // MARK: NSCoding 
    func encodeWithCoder(aCoder: NSCoder) 
    { 
     aCoder.encodeInteger(id, forKey: "id") 
     aCoder.encodeInteger(contact, forKey: "contact") 
    } 

    required convenience init?(coder aDecoder: NSCoder) 
    { 
     let Id = aDecoder.decodeIntegerForKey("id") 
     let Cont = aDecoder.decodeIntegerForKey("contact") 
     self.init(Id:Id, cont:Cont) 
    } 
} 

Bitte sagen Sie mir, was soll ich tun, da ich nicht alle Parameter müssen Kontakte als Ganzes zu initialisieren. Vielen Dank im Voraus :)

+0

Ihre Variablendeklaration könnte einfach 'var contact: Contact' in Ihrem' Group'-Modell sein. Außerdem hast du deine Klasse 'contact' genannt, aber' Contact' in der 'group', aber ich denke, das ist nur ein Tippfehler? – stefandouganhyde

+0

es vermasselt nur schlecht? Was passiert genau? – CW0007007

+0

@stewandoughyde Ja ein Tippfehler .. behoben –

Antwort

1

Sie Variablendeklaration

var contact: Contact 

sagt dieser im Wesentlichen, dass die Gruppe Klasse haben sollte Contact eine nicht optionale Variable vom Typ sein sollte, was bedeutet, dass Sie diese Variable auf eine setzen haben Nicht-Null Contact während der Initialisierung.

+0

Perfekt! Danke für die Antwort. Auch wenn Sie den Link zu der offiziellen Dokumentation, wo dies angegeben ist, geben können, wäre ein großes Plus :) –

+1

Dokumentation-weise, ich denke, das wäre das beste Bit: https://developer.apple.com/library/ios /documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID212 – stefandouganhyde

Verwandte Themen