2014-09-29 9 views
6

In questo esempio di Swift Xcode 6.0.1 per una cella di tabella, .self viene utilizzato come suffisso (non ricordo di averlo visto usato in precedenza come prima) e un prefisso self. (che ovviamente è ovunque), cercando di capire cosa significhi veramente.In Swift, qual è la differenza tra i due diversi usi di sé?

// Register the UITableViewCell class with the tableView 

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.cellIdentifier) 

risposta

8

Il tuo primo utilizzo di sé come prefisso è un riferimento all'istanza della classe che contiene il metodo che viene attualmente richiamato. Nel secondo utilizzo, auto si riferisce a un tipo come valore, in questo caso UITableViewCell.self si riferisce al tipo UITableViewCell

+3

Ok, farò questo come risposta, ma ancora chiedendo se vedo UITableViewCell di per sé, come potrebbe il compilatore non sapere che è riferimento a un UITableViewCell? A quale altro tipo si potrebbe mai riferire? –

3

self è un metodo che restituisce il destinatario del messaggio. In questo caso, restituisce l'oggetto Class per UITableViewCell.

2

Penso che sia perché in qualsiasi altro tipo il tipo viene utilizzato per digitare alcune variabili. Ma SomeType.self dice di usare questo tipo come valore. Non penso che un tipo possa reggersi da solo, a meno che non si chiami lo .self.

Provare quanto segue in un parco giochi.

class Foo {} 
Foo //^Compiler error: expected member name or constructor call after type name 

Ma con .self

class Foo {} 
Foo.self // console reports: (Metatype) 
+0

Grazie, vorrei poter contrassegnare più risposte come risolto. Tutti qui hanno aiutato ugualmente a capire. Ok, più Swift! –

+0

A volte un tipo può essere di sua proprietà, ad es. se è l'unico argomento per una chiamata di funzione. – newacct

Problemi correlati