2014-06-11 18 views
12

Guardate la definizione per il sovraccarico di += operatore in Swift che consente di aggiungere elementi a una raccolta:Cosa significa questo vincolo di tipo generico in Swift?

/// Append the elements of rhs to lhs 
func +=<T, C : Collection where T == T>(inout lhs: ContiguousArrayBuffer<T>, rhs: C) 
           ^^^^^^ 

Cosa fa il vincolo T == T fare? Perché ne abbiamo bisogno qui? Sembra un vincolo banale che è sempre vero.

+1

All'interno di questa funzione di sovraccarico dell'operatore globale sembra strano ... Tuttavia, osservando altri punti che lo utilizzano, ad esempio 'estensione T []: ArrayType {init (_ s: S)} 'Sembra che stia semplicemente cercando di assicurarsi che gli elementi della sequenza degli argomenti abbiano lo stesso tipo dell'array che stai tentando di inizializzare. Non sono sicuro del modo in cui viene applicata tramite questa sintassi però .. – Jack

risposta

6

Le definizioni visualizzate in Xcode non sono in realtà un codice Swift valido. È in qualche modo generato al volo dai file originali

Suppongo che la parte T == T sia un errore commesso dal generatore quando si riducono i file originali.

Ho provato a definire una funzione simile da solo e non è necessario il numero T == T, in realtà a volte attiva un avviso.

+0

Elaborerò quando sono sul mio desktop. – Sulthan

+1

Credo che tu abbia ragione. Le dichiarazioni sono generate automaticamente. 1/Non puoi mostrare il file in Finder. 2/I simboli sono ordinati per nome con l'ordine ASCII. Nessun essere umano potrebbe ordinare il codice in questo modo. 3/Alcune estensioni sono vuote e ciò suggerisce che contenevano codice non analizzato/convertito. 5/Le dichiarazioni sono incomplete. Ad esempio, nessun metodo è dichiarato come 'mutating', il che significa che dovremmo essere in grado di utilizzare qualsiasi metodo su una costante (ma non possiamo). –

+1

@NicolasBachschmidt C'è anche qualche grammatica non valida, ad es. 'estensione T []'. Credo che il 'T == T' in questo caso sia lì perché la funzione fa parte di un'implementazione di un protocollo privato. – Sulthan

Problemi correlati