2014-09-03 19 views
5

Questo initialiser causerà un errore lamentando che "with" is implied for the first parameter of an initialiser; did you mean name?"con" nei nomi di parametro in inizializzatori Swift

init(withName: String){ 

} 

io non sono sicuro di ciò che questo significa, se fornisce automagically il nome del parametro esterno withName se lo chiamo nomino o cosa ...

Se cambio a

init(name: String){ 

} 

ogni tentativo di chiamarlo init(with: "joe") o init(withName: "Joe") non riuscirà. Quindi non ho idea di cosa mi dice il messaggio di errore e di come posso dichiararlo, così lo chiamo init(withName: "joe").

risposta

13

In Swift non è necessario aggiungere with all'inizializzatore. L'inizializzatore dovrebbe essere init(name:) e dovresti chiamarlo come Object(name: "joe").

Ciò è dovuto al modo in cui i metodi Swift eseguono il bridge su ObjC. In ObjC, quell'inizializzatore verrà automaticamente tradotto in initWithName:. Se lo chiami init(withName:) diventerebbe initWithWithName:.

+3

Che caratteristica terribile. :( –

+0

Il messaggio di errore è fuorviante e avrebbe dovuto dire "Il primo parametro di un inizializzatore non può iniziare con 'con' altrimenti sembrerà divertente quando lo chiami da Objective-C". –

Problemi correlati