/ / ¿Cómo agregar extensión pop () a Array en swift? - rápido

¿Cómo agregar extensión pop () a Array en swift? - rápido

¿Cómo extiendo un Array en swift?

quiero decir

extension Array
{
func pop() -> AnyObject
{
let out = self.last
self.removeLast()
return out
}
}

pero al compilador no le gusta self.removeLast () o devuelve

Respuestas

1 para la respuesta № 1

Como apunta @ i40West, removeLast es esencialmente un pop. Dicho esto, si desea solucionar los problemas del compilador con el código original:

  1. La matriz podría no contener referencias de clase, por lo que AnyObject no funcionaria Podrías reemplazar eso con Any (que puede contener clases, estructuras o enumeraciones), pero es mejor devolver un Element, que es lo que una instancia de Array Typealiases para lo que realmente contiene.

  2. self.last devuelve un opcional (en caso de que la matriz esté vacía). Puede optar por devolver un opcional desde pop Similar a last, o simplemente afirmar si la matriz es vacía similar a removeLast.

  3. Ya que pop está modificando self (elimina una entrada) y Array es una estructura, necesitas marcar la función como mutating.

Así que la versión completa, suponiendo removeLast no devolvió un valor, podría ser algo como:

extension Array {
mutating func pop() -> Element {
precondition(self.startIndex != self.endIndex, "Attempt to pop from an empty array")
let out = self.last
self.removeLast()
return out!
}
}

0 para la respuesta № 2

No creo que debas usar AnyObject. ¿Has aprendido los genéricos? Tratar:


Arreglo de extensión { func pop () -> T { dejar salir = uno mismo. self.removeLast () volver fuera } }