Voglio incrementare un Int?
Attualmente ho scritto questo:C'è un modo carino per incrementare un Int opzionale?
return index != nil ? index!+1 : nil
C'è qualche modo più bello di scrivere questo?
Voglio incrementare un Int?
Attualmente ho scritto questo:C'è un modo carino per incrementare un Int opzionale?
return index != nil ? index!+1 : nil
C'è qualche modo più bello di scrivere questo?
Per ragioni di completezza, Optional
ha un metodo map()
:
/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
Pertanto
index != nil ? index! + 1 : nil
è equivalente a
index.map { $0 + 1 }
Mi piace che l'incremento sia più visibile con '+ 1' e che possa funzionare con qualsiasi altro numero :) –
È possibile chiamare la struttura successor
utilizzando opzionale concatenamento:
return index?.successor()
Per un valore arbitrario, advancedBy
opere:
return index?.advancedBy(15)
Se ti sei trovato a fare questo molte volte in il tuo codice, potresti definire il tuo operatore +
che aggiunge un Int
ad un Int?
:
func +(i: Int?, j: Int) -> Int? {
return i == nil ? i : i! + j
}
Poi si può solo fare:
return index + 1
Bella aggiunta alla tua risposta! –
Grazie! Ho aggiunto ancora un altro. – vacawama
Opzionalmente si può chiamare qualsiasi metodo su un optional anteponendo la chiamata con un punto interrogativo, e questo funziona per operatori in forma suffissa troppo:
return index?++
Più in generale si può anche scrivere:
index? += 1; return index
Come detto in una domanda cancellata, questo ha lo svantaggio di non funzionare quando l'indice è una costante (let) –
'indice di ritorno? + = 1' non funziona. Fornisce errore di compilazione 'errore: impossibile convertire l'espressione di ritorno di tipo '()?' per restituire il tipo 'Int?' ' – vacawama
Hai ragione. Ho modificato il mio snippet di codice per risolvere il problema. Ad ogni modo, non soddisfa ancora l'esigenza di lavorare con let e c'è già una buona risposta usando la mappa. –
Non importa quindi. – Arc676
Gli operatori matematici semplici non funzionano con gli optionals. –