¿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 № 1Como apunta @ i40West, removeLast
es esencialmente un pop. Dicho esto, si desea solucionar los problemas del compilador con el código original:
La matriz podría no contener referencias de clase, por lo que
AnyObject
no funcionaria Podrías reemplazar eso conAny
(que puede contener clases, estructuras o enumeraciones), pero es mejor devolver unElement
, que es lo que una instancia deArray
Typealiases para lo que realmente contiene.self.last
devuelve un opcional (en caso de que la matriz esté vacía). Puede optar por devolver un opcional desdepop
Similar alast
, o simplemente afirmar si la matriz es vacía similar aremoveLast
.Ya que
pop
está modificandoself
(elimina una entrada) yArray
es una estructura, necesitas marcar la función comomutating
.
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 } }