2016-10-29 2 views
1

Ich gehe einige ähnliche Fragen durch, kann aber immer noch nicht herausfinden, warum dies geschieht.swift Wert des Typs '[Liquor]' kann nicht in den erwarteten Argumenttyp 'inout _' konvertiert werden

var liquors = [Liquor]() 

func loadSampleLiquors(){ 
    let photo1 = UIImage(named: "Chateau Lafite Rothschild 1993") 
    let liquor1 = Liquor(name: "Chateau Lafite Rothschild", year: "1993", photo: photo1, rating: 7) 
    liquors += [liquor1] // Here is the error happen  
} 

die Fehler messageis: Wert kann nicht vom Typ ‚[Liquor]‘ zu erwarteten Argumenttyp umwandeln ‚inout _‘

Dies ist wahrscheinlich, weil das „Jahr“ Null sein kann, aber ich gehe durch meine Code, dass es gut funktionieren sollte, ich versuche, es zu beheben mit "wenn Let Liköre = xxx", aber dann wird es eine EXC_BAD_INSTRUCTION auf der Dekodierungsfunktion, So poste ich alle meinen Code unter hier:

hier ist mein Alkohol Klasse:

var name: String 
var year: String 
var photo: UIImage? 
var rating: Int 

struct PropertyKey { 
    static let nameKey = "name" 
    static let yearKey = "year" 
    static let photoKey = "photo" 
    static let ratingKey = "rating" 
} 

Ich benutze NSCoding Daten zu speichern:

func encode(with aCoder: NSCoder) { 
    aCoder.encode(name, forKey: PropertyKey.nameKey) 
    aCoder.encode(year, forKey: PropertyKey.yearKey) 
    aCoder.encode(photo, forKey: PropertyKey.photoKey) 
    aCoder.encode(rating, forKey: PropertyKey.ratingKey) 
} 

required convenience init?(coder aDecoder: NSCoder) { 
    let name = aDecoder.decodeObject(forKey: PropertyKey.nameKey) as! String 
    let year = aDecoder.decodeObject(forKey: PropertyKey.yearKey) as! String 
    let photo = aDecoder.decodeObject(forKey: PropertyKey.photoKey) as? UIImage 
    let rating = aDecoder.decodeInteger(forKey: PropertyKey.ratingKey) 
    self.init(name: name, year:year, photo: photo, rating: rating) 
} 
+0

Wo ist die Erklärung von 'Liköre'? – Alexander

+0

@AlexanderMomchliov Ich füge es einfach hinzu – whatever123

+0

Ich fragte nach der Erklärung von 'Liköre', nicht' Alkohol' – Alexander

Antwort

2

Sie den unwrap Operator fehlt. Versuchen Sie dies:

let liquor1 = Liquor(name: "Chateau Lafite Rothschild", year: "1993", photo: photo1, rating: 7)! 

beachten Sie die "!" am Ende

Der Grund, warum Sie auspacken müssen, ist, weil Liquor init Null zurückgeben kann, so dass es ein optionales zurückgibt. Das ist das? am Ende von init

required convenience init? 
Verwandte Themen