Ho due opzioni in sede di attuazione conformità del protocollo a Swift, con lo stesso risultato finale:Dove implementare i protocolli Swift?
- implementare il protocollo all'interno della classe - vale a dire, lo stato di conformità in cima alla definizione di classe, e mettere implementazione all'interno del corpo della classe, oppure
- Implementare il protocollo in un'estensione - ovvero, codificare la conformità del protocollo completamente al di fuori della classe.
Ecco un esempio:
public class MyClass : CustomDebugStringConvertible {
... // Something
public var debugDescription : String {
return "MyClass"
}
}
vs.
class MyClass {
... // Something
}
extension MyClass : CustomDebugStringConvertible {
public var debugDescription: String {
return "MyClass"
}
}
esempi di codice di libri Swift tendono a concentrarsi sul primo approccio; Apple's source code of Swift core rivela che usano solo il secondo approccio (vedere Bool
e Optional
per un esempio).
C'è un modo valido per decidere tra i due approcci a seconda della situazione o è semplicemente una questione di preferenza di codifica?
È puramente una questione di preferenza, ed è quindi una questione di opinione. Personalmente faccio quasi sempre il secondo, ma non assolutamente sempre. Vedi anche i miei commenti sulle estensioni qui: http://www.apeth.com/swiftBook/ch04.html#_extending_object_types – matt