Le strutture possono implementare interfacce, chiamate protocolli in Swift. È possibile avere un parametro, una variabile o un campo / membro che è un protocollo e, poiché più strutture diverse, per non parlare delle classi, possono implementare lo stesso protocollo, una volta passata (o assegnata) una struttura a un parametro di protocollo (o variabile o campo), le specifiche di cui struct potrebbe essere stato "lost" (re: compile time) e la tabella di test del protocollo entra in gioco (re: runtime).
Puoi trovare ulteriori informazioni su disposizione della memoria Swift .
Simile succede in C #, che mi è più familiare. Una struct passata o assegnata a una variabile di interfaccia o campo / membro è in box e la rappresentazione in scatola della struct corrisponde a quella delle rappresentazioni di classe, il che significa che esiste un vtable per le strutture boxed.
Mi aspetto che sia C # che Swift facciano chiamate dirette quando l'oggetto è noto al momento della compilazione come struct, e per usare il vtable vatch quando in fase di compilazione, l'elemento è noto solo come interfaccia.