Parto rispondendoti dalla seconda domanda, che ha una risposta più immediata.
Nei linguaggi di programmazione fortemente tipizzati (come Swift appunto, ma anche Java, C e tanti altri) quando dichiari una variabile devi sempre specificare di che tipo è. In Swift questa cosa può talvolta essere omessa in quanto il compilatore riesce a "capire" di che tipo è una variabile in base a ciò che le viene assegnato (caratteristica detta "type inference").
Per farti un esempio:
let x = 5
In questa istruzione non è esplicitato il tipo della variabile, ma poiché alla variabile assegniamo un numero intero, allora Swift dedurrà che la variabile x è di tipo Int. Di conseguenza, quell'istruzione è esattamente identica a:
let x: Int = 5
Nota che le variabili possono essere solamente di un tipo, per cui se provi ad assegnare ad x un valore non intero, ad esempio una stringa, ti scatterà un errore in compilazione.
Per la prima domanda, invece, cosa non ti è chiaro nello specifico? Il fatto che il parametro si chiami "d" (puoi chiamarlo come ti pare, se "d" non ti piace)? Il fatto che devi esplicitare il tipo "Dog" (essendo Swift fortemente tipizzato, ogni volta che definisci una nuova variabile devi anche specificarne il tipo, salvo i casi in cui interviene la type inference di cui sopra)?