2015-10-02 7 views
21
class SomeClass { 
    var someProperty: Int { 
    throw Err("SNAFU") 
    } 
} 

Per codice come sopra, l'errore di binary swift non viene gestito perché la funzione di inclusione non viene dichiarata "getta".Come si dichiara che una proprietà calcolata "getta" in Swift 2?

Come si dichiara che 'someProperty' 'getta' in quanto sopra?

class SomeClass { 
    var someProperty throws: Int { 
    } 
} 

e

class SomeClass { 
    var someProperty: throws Int { 
    } 
} 

e

class SomeClass { 
    var someProperty: Int throws { 
    } 
} 

non sembrano funzionare.

risposta

25

Come di Swift 3:

Non si può gettare da una proprietà calcolata. È necessario utilizzare una funzione se si desidera lanciare. La parte Declarations section of the Language Reference alla fine di The Swift Programming Language elenca solo throws (e rethrows) come parola chiave per le dichiarazioni di funzione e inizializzatore.

+0

Grazie per il riferimento alla lingua; è abbastanza convincente. Mi rendo conto che questo non è il problema originale che ho chiesto, ma nel mio scenario, ho un tipo di contenitore e voglio solo implementare 'hashValue' quando ciascuno degli elementi è esso stesso lavabile. Sai per caso cosa posso fare per risolvere il problema? – math4tots

+0

È ragionevole rendere il contenitore un tipo generico che funziona solo con elementi 'Hashable' nello stesso modo in cui le chiavi' Dictionary' veloci devono essere selezionabili? In caso contrario, suppongo che potresti dover lavorare per ottenere una funzione di hash nel caso in cui i tuoi elementi non siano lavabili poiché il protocollo '' Hashable'' non consente una risposta 'nil' e non puoi 'throw'. Potresti anche usare 'fatalError()' se è appropriato. –

+0

Dopo averci pensato, penso che sto combattendo troppo il (tipo) sistema, e probabilmente sto meglio sottomettendomi ai miei migliori padroni. Grazie per l'aiuto! – math4tots

27

Mentre è non è possibile (ancora) a throw dalle proprietà calcolate a Swift, ho trovato Chris Lattner stesso Indirizzi questa stessa domanda sul one of Apple Developer Forums threads:

Siamo d'accordo che si dovrebbe essere in grado di marcare i getter e setter come "getta" in pedici e proprietà calcolate, ma non sono ancora arrivati. È probabile che lo supporteremo a un certo punto, ma non è chiaro se lo farà in tempo per Swift 2.

+0

Bello vedere i commenti di Chris su questo. – BonanzaDriver

+9

Nota che questo non è cambiato in swift 3. – mcfedr

+4

Nota che questo non è cambiato in Swift 4. –