2015-05-15 13 views
8

Ich habe eine Klasse in swift, die einen schwachen Zeiger auf ein Array von Objekten haben muss, die in einer anderen Klasse zugeordnet ist. Ich habeweak kann nicht auf Nicht-Klassen-Typ angewendet werden uiimageview

class myView: UIView 
{ 
    var lines:[CAShapeLayer] = [] 
    weak var avatars : [UIImageView]? 

Der Fehler, den ich bekommen ist

'schwach' kann nicht auf nicht-Klasse-Typ angewendet werden '[UIImageView]

ich auch ohne Erfolg versucht:

weak var avatars : [UIImageView?]? 

Antwort

2

Sie versuchen, weak auf eine Array des Typsanzuwenden. Array ist eine Struktur.

8

braucht einen schwachen Zeiger auf ein Array von Objekten

Nun, haben, wie die Fehlermeldung Ihnen sagt, Sie können es nicht. Array ist eine Struktur, keine Klasse. Sie können keine schwache Referenz auf eine Strukturinstanz haben. es ist ein Werttyp, also nicht weak Speicherverwaltung.

Noch braucht es es - es besteht keine Gefahr eines Retain-Zyklus, weil dies ein Werttyp ist. Sie sollten sich fragen, warum Sie denken, dass es es braucht. Vielleicht denkst du, weak und optional gehen immer zusammen, aber sie nicht. Sie haben dies bereits als optionales Array deklariert. das ist sicher genug.

25

Schwache angewendet werden Kann nicht auf nicht-Klasse Typ:

Es bedeutet, dass Sie nicht einen schwachen Verweis auf einen beliebigen Wert Typ-Instanz (zB Array, Wörterbuch, String, etc ...), weil diese alle sind haben struct nicht klasse. Sie geben nur schwache Referenzen an, die vom Klassentyp sind (z. B. UIImage, UIImageView, etc ...). In diesem Fall versuchen Sie, einen schwachen Verweis auf UIImageView Array anzugeben, und wir wissen, dass Array ein Werttyp ist.

Zum Beispiel:

weak var str: String? //CompileTime Error(Wrong) 

weak var arr: Array? //CompileTime Error(Wrong) 

weak var imageView: UIImageView? //Correct 

Bei Protokoll: Wenn wir nur ein Protokoll von Strukturtyp haben:

protocol SomeProtocol{ 
    func doSomething() 
} 

Wir können keine Variablen dieses Typs deklarieren als schwach:

weak var delegate: SomeProtocol? //CompileTime Error(Wrong) 

Aber wenn wir Protokoll der Klassenart wie folgt machen:

protocol SomeProtocol: class{ 
    func doSomething() 
} 

Wir können Variablen dieses Typs als schwach erklären:

weak var delegate: SomeProtocol? //Correct 

Ich glaube, Sie es leicht verstehen, warum dies in Protokoll geschieht?

Der gleiche Grund: Sie geben nur schwache Referenz, die von Klassen-Typ sind

+0

du bist ein Retter. Vielen Dank – ekeith

Verwandte Themen