Eu pensei que struct usava por causa de imutabilidade, que nem no react, que você faz a cópia do array e não modifica o original, mas você utiliza o mutating, não tem um jeito de criar uma cópia pra alterar o valor?
Eu pensei que struct usava por causa de imutabilidade, que nem no react, que você faz a cópia do array e não modifica o original, mas você utiliza o mutating, não tem um jeito de criar uma cópia pra alterar o valor?
Oi Gisele, tudo bem?
Structs são sim imutáveis, justamente por esse fator utilizamos a palavra-chave mutating
antes de uma função na qual desejamos alterar um atributo dessa struct.
Uma maneira de criar uma cópia seria criando uma nova variável dentro da função e igualando ao atributo que você gostaria de alterar. Essa variável ficará salva no escopo da função e você pode manipulá-la da maneira que quiser.
Quando criamos uma instância dessa struct, ela é independente de qualquer outra struct, como é mostrado no vídeo! Se você igualar uma struct a outra, mas alterar seus atributos, eles serão alterados de forma independente, pois elas são imutáveis. Já com classes, isso não acontece, já que são declaradas como referência na memória.
Fez sentido? Me retorne aqui qualquer dúvida!
Faz sim, é que eu estou acostumada com Javascript e usa um pouco de programação funcional quando usa react, aí tem a história do estado que tem que mudar, tem isso que eu falei que faz a cópia do array pra não modificar o valor diretamente e eu não sabia se tinha isso no iOS, mas pelo que você explicou não é para isso que eu pensei.
Oi Gisele!
Você pode mandar um exemplo de código com Javascript que você está mencionando sobre e explicar como você gostaria de fazer em Swift?
Assim acredito que fique mais fácil para eu compreender melhor sua dúvida e conseguir te auxiliar.
Abraços!
Oi,
Seria isso, mas era mais por curiosidade mesmo, não estudei muito sobre swift e classes para saber se se aplica isso:
const addValue = (arr) => { return [...arr, 1]; };
No flutter também tem isso, só que usa copyWith(), como eu estava estudando Flutter eu vi que se usa quase igual no react, quando usa emit do Bloc, ele usa isso. Mas porque o flutter também tem essa parte de imutable, eu vi que o iOS tem o @state, então por isso que eu perguntei.
Tem um artigo sobre o assunto no Javascript:
https://blog.logrocket.com/immutability-react-should-you-mutate-objects/
Ahh entendi!
O @State
, na verdade, é uma propriedade do SwiftUI, um framework para desenvolver aplicativos iOS. Nesse caso ele funciona como um observador de estado, como você mencionou com o React, através do useState
. Mas na própria linguagem Swift, ele não existe.
De fato, não há um operador spread no Swift, assim como há no exemplo mostrado com Javascript. Entretando, há algumas opções de se obter o mesmo resultado.
Abraços!