2015-05-15 3 views

risposta

2

si sta cercando di applicare weak a un Array di tipo UIImageView. Array è una struttura.

8

ha bisogno di avere un puntatore debole per un array di oggetti

Bene, come il messaggio di errore che si dice, non si può. La matrice è una struttura, non una classe. Non è possibile avere un riferimento debole a un'istanza di struct; è un tipo di valore, quindi non esegue la gestione della memoria weak.

Né ne ha bisogno, non esiste il pericolo di un ciclo di conservazione, poiché si tratta di un tipo di valore. Dovresti chiederti perché pensi che ne abbia bisogno. Forse pensi che weak e Optional vanno sempre insieme, ma non lo fanno. Hai già dichiarato questo array opzionale; questo è abbastanza, sicuramente.

25

debole non può essere applicato al tipo non-classe:

significa che non si può avere un debole riferimento a qualsiasi istanza tipo di valore (ad esempio Array, dizionario, String, ecc ...) perché questi sono tutti struct not class. Fornite solo riferimenti deboli che sono di tipo classe (ad esempio UIImage, UIImageView, ecc ...). In questo caso, si sta tentando di fornire un riferimento debole a UIImageView Array e sappiamo che l'array è un tipo di valore, quindi non è possibile.

Ad esempio:

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

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

weak var imageView: UIImageView? //Correct 

In caso di protocollo: Se abbiamo solo un protocollo di tipo struct:

protocol SomeProtocol{ 
    func doSomething() 
} 

Non possiamo dichiarare variabili di questo tipo come deboli:

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

Ma se facciamo un protocollo di tipo classe come questo:

protocol SomeProtocol: class{ 
    func doSomething() 
} 

Possiamo dichiarare variabili di questo tipo come debole:

weak var delegate: SomeProtocol? //Correct 

Penso che si capisce facilmente, perché questo accade nel protocollo?

stesso motivo: solo dare riferimento debole che sono di classe di tipo

+0

sei un salvatore. Grazie – ekeith