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 № 1Como o @ i40West aponta, removeLast
é essencialmente um pop. Dito isso, se você quiser corrigir os problemas do compilador com o código original:
A matriz pode não conter referências de classe
AnyObject
não funcionaria. Você poderia substituir isso comAny
(que pode conter classes, estruturas ou enums), mas é melhor retornar umElement
, que é o que um exemplo deArray
tipealiases para o que realmente contém.self.last
retorna um opcional (caso a matriz esteja vazia). Você pode escolher devolver um opcional depop
igual alast
, ou apenas afirmar se a matriz está vazia semelhante aremoveLast
.Desde a
pop
está modificandoself
(remove uma entrada) eArray
é uma estrutura, você precisa marcar a função comomutating
.
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 } }