2014-11-07 19 views
5

In Java è possibile inizializzare le stringhe statiche finali in un'interfaccia. C'è anche un metodo in Swift?Swift Inizializzazione di variabili costanti nel protocollo

+0

perché non leggere semplicemente questo https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Protocols.html? Racconta tutto sui protocolli in Swift –

+0

In generale non è una buona architettura dichiarare le costanti nelle interfacce. So che molti sviluppatori Java lo fanno e quindi stanno implementando quell'interfaccia con le costanti alle loro classi, ma questo è davvero un abuso del concetto di interfacce. Un'interfaccia dovrebbe fornire un'interfaccia comune, cioè metodi comuni. Non costanti. – Sulthan

risposta

3

No swift non lo supporta. Il mio consiglio è di definire una struttura accanto al protocollo e definire tutte le costanti come proprietà statiche memorizzabili immutabili. Per esempio:

protocol MyProtocol { 
} 

struct MyProtocolConstants { 
    static let myConstant = 10 
} 

Si noti che le strutture sono preferite alle classi, per almeno una ragione: le classi non supportano le proprietà statiche memorizzate (ancora)

+0

Grazie mille per la rapida risposta! –

2

In realtà, si può fare questo a Swift utilizzando le estensioni di protocollo :

Creare un protocollo e definire la variabile che vuoi con un getter:

protocol Order { 
    var MAX_ORDER_ITEMS: Int { get } 
    func getItem(item: Int) -> OrderItem 
    // etc 
} 

definire un protocollo di estensione:

extension Order { 
    var MAX_ORDER_ITEMS: Int { return 1000 } 
} 

Un vantaggio di questo è che non è necessario prefisso il nome del protocollo come al solito con Swift e statica.

L'unico problema è che è possibile accedere alla variabile solo all'interno di una classe che implementa il protocollo (che è probabilmente il caso più comune in ogni caso).

Problemi correlati