/ / Como adicionar extensão pop () para Array no swift? - rápido

Como adicionar extensão pop () para Array no swift? - rápido

Como faço para estender um array rapidamente?

eu quero dizer

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

mas o compilador não gosta de self.removeLast () ou retornar

Respostas:

1 para resposta № 1

Como o @ i40West aponta, removeLast é essencialmente um pop. Dito isso, se você quiser corrigir os problemas do compilador com o código original:

  1. A matriz pode não conter referências de classe AnyObject não funcionaria. Você poderia substituir isso com Any (que pode conter classes, estruturas ou enums), mas é melhor retornar um Element, que é o que um exemplo de Array tipealiases para o que realmente contém.

  2. self.last retorna um opcional (caso a matriz esteja vazia). Você pode escolher devolver um opcional de pop igual a last, ou apenas afirmar se a matriz está vazia semelhante a removeLast.

  3. Desde a pop está modificando self (remove uma entrada) e Array é uma estrutura, você precisa marcar a função como mutating.

Então a versão completa, assumindo removeLast não retornou um valor, poderia 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 resposta № 2

Eu não acho que você deveria usar AnyObject. Você aprendeu genéricos? Experimentar:


extensão Array { func pop () -> T { soltou = self.last self.removeLast () devolver } }