protocol extension swift int increment optional

extension - swift syntax



¿Hay una manera bonita de incrementar un Int opcional? (3)

Quiero aumentar un Int?
Actualmente he escrito esto:

return index != nil ? index!+1 : nil

¿Hay alguna forma más bonita de escribir esto?


En aras de la completitud, Optional tiene un método 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?

Por lo tanto

index != nil ? index! + 1 : nil

es equivalente a

index.map { $0 + 1 }


Puede llamar a la propiedad successor utilizando el encadenamiento opcional :

return index?.successor()

Para un valor arbitrario, advancedBy funciona:

return index?.advancedBy(15)

Si se encontró haciendo esto muchas veces en su código, ¿podría definir su propio operador + que agregue un Int a un Int? :

func +(i: Int?, j: Int) -> Int? { return i == nil ? i : i! + j }

Entonces podrías hacer lo siguiente:

return index + 1


Opcionalmente puede llamar a cualquier método en una opción anteponiendo la llamada con un signo de interrogación, y esto también funciona para operadores de postfix:

return index?++

De manera más general, también puedes escribir:

index? += 1; return index