2016-01-05 16 views
6

ho visto alcuni codice sorgente in GitHub, in questo modo: functional-swiftSwift stile di programmazione

Possiamo vedere c'è definizione di una struttura chiamata nave, e ci sei qualche variabile in esso. Dal seguente codice possiamo vedere che ci sono anche alcune funzioni in esso. E 'scritto nella forma seguente:

struct xxx { 
} 

extension xxx { 
    func yyy() {} 
} 

posso anche definito lo struct nel seguente stile:

struct xxx { 
    func yyy() {} 
} 

Quindi cosa diversa dei due stile? C'è una guida rapida allo stile di programmazione?

+1

Controllare questa [domanda] (http://stackoverflow.com/questions/28367950/swift-and-using-class-extension). Penso che copra la tua domanda. – courteouselk

+2

Aiuta ad organizzare il codice in gruppi di metodi correlati, in particolare quando si adottano i protocolli (come spiegato nella Q & A di riferimento). Consigliato qui: https://github.com/raywenderlich/swift-style-guide#protocol-conformance. –

+0

Il modo in cui si raggruppano i metodi in estensioni è una questione di gusto personale. Non definirei un'estensione per * ogni * metodo, come nel codice di esempio a cui ti sei collegato. –

risposta

0

From the Swift docs:

estensioni aggiungono nuove funzionalità a una classe, la struttura, l'enumerazione, o tipo di protocollo esistente. Ciò include la possibilità di estendere i tipi per i quali non si ha accesso al codice sorgente originale (noto come modellazione retroattiva).

Quindi l'utilità è quando si desidera estendere un'implementazione già esistente. Apple ha una buona documentazione e consiglio vivamente di leggere il link sopra.

+0

La domanda qui riguarda la definizione del proprio tipo, non l'estensione di un tipo esistente per il quale non si dispone del codice sorgente. –

1

dal vostro esempio, il primo è una struttura di base con un'estensione

struct xxx { 
} 

extension xxx { 
function yyy() {} 
} 

l'altro è una struttura con una funzione incorporata.

struct xxx { 
function yyy() {} 
} 

immaginare che non è possibile modificare lo struct originale per qualche motivo ma vuoi comunque essere in grado di eseguire la funzione yyy() -> puoi estendere la classe per chiamare la funzione yyy() senza modificare la classe stessa (o cambiando il modo in cui si comporta altrove nel tuo programma)

"Le estensioni possono aggiungere nuove funzionalità a un tipo, ma non possono ignorare la funzionalità esistente." (src: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html)

-> Le estensioni sono utili quando non si ha accesso a una classe ma si desidera aggiungere alcune funzionalità. Usando le estensioni, puoi compartimentare le tue classi e personalizzare ciò che una classe può fare se necessario.

Problemi correlati